Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions docs/try/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,10 @@ description: "Hands-on guided tutorials to experience Viam end-to-end."
manualLink: "/try/overview/"
date: "2025-01-30"
---

Build a complete quality inspection system in about 45 minutes, using a
Gazebo simulation so you don't need any hardware. You'll set up a vision
pipeline, capture data, write and deploy a custom module, and build a
monitoring dashboard.

Start with the [overview](/try/overview/) to see what you'll build.
2 changes: 1 addition & 1 deletion docs/try/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ weight: 1
layout: "docs"
type: "docs"
no_list: true
description: "Build a complete quality inspection system with Viam from camera setup to customer-facing product."
description: "Build a complete quality inspection system with Viam, from camera setup to customer-facing product."
date: "2025-01-30"
aliases:
- /try/first-project/
Expand Down
2 changes: 1 addition & 1 deletion docs/try/part-1.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ After adding the camera component, you will see two items appear under your mach

To configure your camera component to work with the camera in the simulation, you need to specify the correct camera ID. Most components require a few configuration parameters.

1. In the **ATTRIBUTES** section, add:
1. In the **Attributes** section, add:

```json
{
Expand Down
4 changes: 2 additions & 2 deletions docs/try/part-2.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,15 @@ The default configuration options for the data service are correct for our appli
**Enable data capture on the vision service:**

1. Click `vision-service` in your machine configuration
2. Find the **DATA CAPTURE** section and click **Add method**
2. Find the **Data capture** section and click **Add method**
3. Select the method to capture: `CaptureAllFromCamera`
4. Set **Frequency (hz)** to `0.5` (every 2 seconds)
5. Set **Camera name** to `inspection-cam`
6. **Save** your configuration

**Verify it's working:**

1. In the **DATA CAPTURE** section of the `vision-service` configuration panel you should now see a collapsible component labeled **Latest capture** with a day and time specified
1. In the **Data capture** section of the `vision-service` configuration panel you should now see a collapsible component labeled **Latest capture** with a day and time specified
2. Click on **Latest capture** and view the most recent image captured

Your machine is now capturing detection results and images every 2 seconds and syncing them to the Viam cloud application. Once synced to the cloud, the data is removed from your machine to free up storage.
Expand Down
2 changes: 1 addition & 1 deletion docs/try/part-4.md
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ This tells viam-server to wait for `inspector-service` to initialize before the
**Enable data capture on the inspector:**

1. In the **CONFIGURE** tab, click on `inspector-service` to open its configuration panel
2. Find the **DATA CAPTURE** section and click **Add method**
2. Find the **Data capture** section and click **Add method**
3. Select the method: `DoCommand`
4. Set **Frequency (hz)** to `0.5` (captures every 2 seconds)
5. In the **Additional parameters** section, add the DoCommand input:
Expand Down
37 changes: 30 additions & 7 deletions docs/try/part-5.md
Original file line number Diff line number Diff line change
Expand Up @@ -256,12 +256,35 @@ For fully custom dashboards with your own branding, you can build web applicatio

You've completed the tutorial. Here's what you built:

1. **Vision Pipeline**—Camera, ML model, and vision service detecting defects
2. **Data Capture**—Automatic recording and cloud sync of images and detections
3. **Control Logic**—Custom inspector module exposing detection through DoCommand
4. **Module Deployment**—Packaged and deployed to run autonomously
5. **Productize**—Monitoring dashboard with real-time analytics

You've gone from an empty machine to a production-ready inspection system with monitoring—patterns that apply to any Viam application.
1. **Vision Pipeline**: camera, ML model, and vision service detecting defects
2. **Data Capture**: automatic recording and cloud sync of images and detections
3. **Control Logic**: custom inspector module exposing detection through DoCommand
4. **Module Deployment**: packaged and deployed to run autonomously
5. **Productize**: monitoring dashboard with real-time analytics

You've gone from an empty machine to a production-ready inspection system
with monitoring. These patterns apply to any Viam application.

## Using real hardware instead of simulation

Everything you built in this tutorial works the same way with real
hardware. To transition from the Gazebo simulation to a physical setup:

1. **Replace the camera.** Remove the `gz-camera` module and add a real
camera component (for example, a `webcam` for a USB camera). The
vision service, data capture, and your inspector module all reference
the camera by name. Update that name in your configurations and the
rest works unchanged.
2. **Keep the fragment.** The `try-vision-pipeline` fragment works with
any camera. If you train a new ML model for your specific use case,
create your own fragment with your model.
3. **Keep the module.** Your inspector module runs the same code whether
the camera is simulated or real. Deploy it to the machine running
`viam-server` on your physical hardware.
4. **Keep the dashboard.** The Teleop workspace and MQL queries work with
data from any machine.

The only thing that changes is the camera component. Everything else
(vision pipeline, data capture, module, dashboard) carries over directly.

**[← Back to Overview](../)** to review what you learned.
Loading