Skip to content

Commit a214ee7

Browse files
Migrate remaining 5 service references to reference/services/
Copy base-rc, discovery, frame-system, generic, and navigation from operate/reference/services/ to reference/services/. Update frontmatter, fix internal links, fix stale UI labels, remove self-referencing aliases, remove navigation next-steps section with tutorial link, remove SLAM links from generic page (SLAM API page does not exist yet). Services landing page updated with cards for all migrated services. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 12b6514 commit a214ee7

11 files changed

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

0 commit comments

Comments
 (0)