Skip to content

Commit 2c987d1

Browse files
Headless-app aliases + motion service reference migration (viamrobotics#4976)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 12b6514 commit 2c987d1

11 files changed

Lines changed: 1270 additions & 1 deletion

File tree

docs/build-apps/overview.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@ layout: "docs"
66
type: "docs"
77
description: "Build software that uses a Viam SDK to talk to your machines and the Viam cloud, from web dashboards to long-running backend services."
88
date: "2026-04-10"
9+
aliases:
10+
- /operate/control/headless-app/
11+
- /product-overviews/sdk-as-client/
12+
- /program/sdk-as-client/
13+
- /program/sdks/
14+
- /program/
15+
- /program/run/
16+
- /program/debug/
17+
- /how-tos/develop-app/
18+
- /use-cases/develop-app/
919
---
1020

1121
A Viam app is software that uses a Viam SDK to talk to a machine or to the Viam cloud. It runs outside `viam-server`: in a browser, on a phone, on a server, or on a laptop. Viam apps come in many shapes: a browser dashboard, a Flutter app on a kiosk, a Python service that polls sensors, a Go program that orchestrates a fleet.

docs/reference/services/_index.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,14 @@ description: "Configuration reference for Viam built-in services: per-service mo
99
date: "2026-04-14"
1010
---
1111

12-
Configuration reference for Viam built-in services. For API method reference, see [APIs](/reference/apis/).
12+
Configuration reference for Viam built-in services. Each page covers available models, configuration attributes, and JSON templates. For API method reference, see [Service APIs](/reference/apis/services/).
1313

1414
{{< cards >}}
15+
{{% card link="/reference/services/base-rc/" %}}
16+
{{% card link="/reference/services/discovery/" %}}
17+
{{% card link="/reference/services/frame-system/" %}}
18+
{{% card link="/reference/services/generic/" %}}
19+
{{% card link="/reference/services/motion/" %}}
20+
{{% card link="/reference/services/navigation/" %}}
1521
{{% card link="/reference/services/vision/" %}}
1622
{{< /cards >}}
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
---
2+
title: "Base remote control service"
3+
linkTitle: "Base remote control"
4+
weight: 70
5+
layout: "docs"
6+
type: "docs"
7+
description: "The base remote control service allows you to remotely control a base with an input controller like a gamepad."
8+
date: "2026-04-18"
9+
aliases:
10+
- /reference/services/base-rc/
11+
- /services/base-rc/
12+
- /mobility/base-rc/
13+
---
14+
15+
The base remote control service implements an [input controller](/reference/components/input-controller/) as a remote control for a [base](/reference/components/base/).
16+
This uses the [`input` API](/reference/components/input-controller/#api) to make it easy to add remote drive controls for your rover or other mobile robot with a controller like a gamepad.
17+
18+
Add the base remote control service after configuring your machine with a base and input controller to control the linear and angular velocity of the base with the controller's button or joystick controls.
19+
20+
Control mode is determined by the configuration attribute `"control_mode"`, for which there are five options:
21+
22+
1. `"arrowControl"`: Arrow buttons control speed and angle
23+
2. `"triggerSpeedControl"`: Trigger button controls speed and joystick controls angle
24+
3. `"buttonControl"`: Four buttons (usually X, Y, A, B) control speed and angle
25+
4. `"joystickControl"`: One joystick controls speed and angle
26+
5. `"droneControl"`: Two joysticks control speed and angle
27+
28+
You can monitor the input from these controls in the **CONTROL** tab.
29+
30+
## Used with
31+
32+
{{< cards >}}
33+
{{< relatedcard link="/reference/components/base/" required="yes" >}}
34+
{{< relatedcard link="/reference/components/input-controller/" required="yes" >}}
35+
{{< relatedcard link="/reference/components/movement-sensor/" >}}
36+
{{< /cards >}}
37+
38+
{{% snippet "required-legend.md" %}}
39+
40+
## Configuration
41+
42+
You must configure a [base](/reference/components/base/) with a [movement sensor](/reference/components/movement-sensor/) as part of your machine to be able to use a base remote control service.
43+
44+
First, make sure your base is physically assembled and powered on.
45+
Then, configure the service:
46+
47+
{{< tabs >}}
48+
{{% tab name="Builder" %}}
49+
50+
Navigate to the **CONFIGURE** tab of your machine's page.
51+
Click the **+** icon next to your machine part in the left-hand menu and select **Configuration block**.
52+
Select the `base remote control` type.
53+
Enter a name or use the suggested name for your service and click **Create**.
54+
55+
In your base remote control service's configuration panel, copy and paste the following JSON object into the attributes field:
56+
57+
```json {class="line-numbers linkable-line-numbers"}
58+
{
59+
"base": "<your-base-name>",
60+
"input_controller": "<your-controller-name>"
61+
}
62+
```
63+
64+
Edit the attributes as applicable to your machine, according to the table below.
65+
66+
For example:
67+
68+
![An example configuration for a base remote control service.](/services/base-rc/base-rc-ui-config.png)
69+
70+
{{% /tab %}}
71+
{{% tab name="JSON Template" %}}
72+
73+
```json {class="line-numbers linkable-line-numbers"}
74+
{
75+
"name": "<your-base-remote-control-service>",
76+
"api": "rdk:service:base_remote_control",
77+
"model": "rdk:builtin:builtin",
78+
"attributes": {
79+
"base": "<your-base-name>",
80+
"input_controller": "<your-controller-name>"
81+
}
82+
}
83+
```
84+
85+
{{% /tab %}}
86+
{{% tab name="JSON Example" %}}
87+
88+
```json {class="line-numbers linkable-line-numbers"}
89+
{
90+
"name": "gamepad_service",
91+
"api": "rdk:service:base_remote_control",
92+
"model": "rdk:builtin:builtin",
93+
"attributes": {
94+
"base": "my-base",
95+
"input_controller": "my-input-controller",
96+
"control_mode": "arrowControl"
97+
}
98+
}
99+
```
100+
101+
{{% /tab %}}
102+
{{< /tabs >}}
103+
104+
Edit and fill in the attributes as applicable.
105+
The following attributes are available for base remote control services:
106+
107+
<!-- prettier-ignore -->
108+
| Name | Type | Required? | Description |
109+
| ---- | ---- | --------- | ----------- |
110+
| `base` | string | **Required** | The `name` of the [base](/reference/components/base/) you have configured for the base you are operating with this service. |
111+
| `input_controller` | string | **Required** | The `name` of the [input controller](/reference/components/input-controller/) you have configured for the base you are operating with this service. |
112+
| `control_mode` | string | Optional | The mode of remote control you want to use. <br> Options: <ul><li>`"arrowControl"`</li><li>`"triggerSpeedControl"`</li><li>`"buttonControl"`</li><li>`"joystickControl"`</li> <li>`"droneControl"`</li></ul> <br> Default: `"arrowControl"` |
113+
| `max_angular_degs_per_sec` | float | Optional | The max angular velocity for the [base](/reference/components/base/) in degrees per second. |
114+
| `max_linear_mm_per_sec` | float | Optional | The max linear velocity for the [base](/reference/components/base/) in meters per second. |
115+
116+
## API
117+
118+
The base remote control service supports the following methods:
119+
120+
{{< readfile "/static/include/services/apis/generated/base_remote_control-table.md" >}}
121+
122+
{{% alert title="Tip" color="tip" %}}
123+
124+
The following code examples assume that you have a machine configured with a [base](/reference/components/base/) named `"my_base"`, [input controller](/reference/components/input-controller/) named `"my_controller"`, and base remote control service named `"my_base_rc_service"`.
125+
Make sure to add the required code to connect to your machine and import any required packages at the top of your code file.
126+
Go to your machine's **CONNECT** tab and select **API keys** to get your credentials, then use the code sample to connect to your machine.
127+
128+
{{% /alert %}}
129+
130+
{{< readfile "/static/include/services/apis/generated/base_remote_control.md" >}}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
---
2+
title: "Discovery service"
3+
linkTitle: "Discovery"
4+
description: "Use a discovery service to discover available resources on a machine."
5+
layout: "docs"
6+
type: "docs"
7+
weight: 50
8+
modulescript: true
9+
date: "2026-04-18"
10+
aliases:
11+
- /reference/services/discovery/
12+
---
13+
14+
A discovery service allows you to return a list of physical hardware available on a machine, and suggest configurations for those components to integrate the hardware into the machine.
15+
If you are [creating a modular resource](/build-modules/write-a-driver-module/) that depends on other {{< glossary_tooltip term_id="resource" text="resources" >}} that are discoverable in a systematic way, you can create a discovery service as part of your module to discover those resources.
16+
17+
## Example usage
18+
19+
Imagine you are creating a vision service module that depends on a camera.
20+
To make it easier for users to configure the camera, you include a discovery service in your module.
21+
You implement the discovery service to report all the camera paths your computer or SBC finds.
22+
Users of your module can then:
23+
24+
1. Configure both the vision service and the discovery service in their machine's configuration.
25+
1. Click the **Test** panel in the discovery service configuration to see all cameras recognized by the machine, presented as a list of configuration snippets.
26+
1. Create a camera with the copy-pasteable configuration snippet for the camera they want to use, with the camera path already filled in.
27+
1. Use the configured camera in their vision service configuration.
28+
29+
To see this in action, see [webcam discovery](/reference/components/camera/webcam/#find-a-video-path-using-a-discovery-service) as an example.
30+
31+
To interact with a discovery service programmatically, use the [discovery service API](/reference/apis/services/discovery/).
32+
33+
## Configuration
34+
35+
To use a discovery service, you need to add it to your machine's configuration.
36+
37+
Go to your machine's **CONFIGURE** page, and add your discovery service.
38+
39+
The following list shows the available discovery service models.
40+
For additional configuration information, click on the model name:
41+
42+
{{< tabs >}}
43+
{{% tab name="viam-server" %}}
44+
45+
{{<resources api="rdk:service:discovery" type="discovery" no-intro="true">}}
46+
47+
{{< readfile "/static/include/create-your-own-mr.md" >}}
48+
49+
{{% /tab %}}
50+
{{% tab name="Micro-RDK" %}}
51+
52+
{{< alert title="Support Notice" color="note" >}}
53+
54+
There is currently no support for this component compatible with the Micro-RDK.
55+
56+
{{< /alert >}}
57+
58+
{{% /tab %}}
59+
{{< /tabs >}}
60+
61+
## API
62+
63+
The [discovery service API](/reference/apis/services/discovery/) supports the following methods:
64+
65+
{{< readfile "/static/include/services/apis/generated/discovery-table.md" >}}

0 commit comments

Comments
 (0)