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
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ from the camera can be used.
- [ZividBenchmark] - Zividbenchmark is a sample that will test the
average speed of different operations on your computer.
- **Network**
- [AutomaticNetworkConfigurationForCameras] - \* Automatically
- [AutomaticNetworkConfigurationForCameras] - Automatically
configure the IP addresses of connected cameras to match the
network of the user's PC.
- [NetworkConfiguration] - Uses Zivid API to change the IP address
Expand Down Expand Up @@ -199,7 +199,7 @@ from the camera can be used.
- **MultiCamera**
- [MultiCameraCalibration] - Use captures of a calibration object
to generate transformation matrices to a single coordinate
frame, from connected cameras.
frame, from multiple connected cameras.
- [MultiCameraCalibrationFromZDF] - Use captures of a calibration
object to generate transformation matrices to a single
coordinate frame, from a ZDF files.
Expand Down Expand Up @@ -305,6 +305,7 @@ their respective instructions on the following pages:
- [Install Zivid + HALCON for LINUX]
- [Create a HALCON "Hello World" Program]
- [How to Run a HALCON Sample]
- [Capture Settings in HALCON]
- [Debug in HALCON]
- [HALCON Sample Videos]

Expand Down Expand Up @@ -446,6 +447,7 @@ If your build hangs, try to increase the memory available to Docker.
[Install Zivid + HALCON for LINUX]: https://support.zivid.com/en/latest/camera/api-reference/samples/halcon/install-zivid-halcon-for-linux.html
[Create a HALCON "Hello World" Program]: https://support.zivid.com/en/latest/camera/api-reference/samples/halcon/create-a-halcon-hello-world.html
[How to Run a HALCON Sample]: https://support.zivid.com/en/latest/camera/api-reference/samples/halcon/how-to-run-a-halcon-sample.html
[Capture Settings in HALCON]: https://support.zivid.com/en/latest/camera/api-reference/samples/halcon/capture-settings-in-halcon.html
[Debug in HALCON]: https://support.zivid.com/en/latest/camera/api-reference/samples/halcon/halcon-debug.html
[HALCON Sample Videos]: https://support.zivid.com/en/latest/camera/api-reference/samples/halcon/halcon-sample-videos.html
[Knowledge Base]: https://support.zivid.com/en/latest
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
/*
Detect and decode linear and matrix barcodes from a 2D capture.

For more information on how to use the Zivid Barcode Detector, check out the Barcode Detection tutorial:
https://support.zivid.com/en/latest/camera/academy/applications/barcode-detection.html
*/

#include <Zivid/Experimental/Toolbox/Barcode.h>
Expand Down
3 changes: 3 additions & 0 deletions source/Applications/Advanced/Barcode/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Barcode Detection

> **Tutorial:** Read the full [Barcode Detection](https://support.zivid.com/en/latest/camera/academy/applications/barcode-detection.html) tutorial on Zivid Knowledge Base.
3 changes: 3 additions & 0 deletions source/Applications/Advanced/Downsample/Downsample.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
Downsample point cloud from a ZDF file.

The ZDF files for this sample can be found under the main instructions for Zivid samples.

For more information on downsampling point clouds, check out this tutorial:
https://support.zivid.com/en/latest/camera/academy/applications/downsampling.html
*/

#include <Zivid/Visualization/Visualizer.h>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
/*
Capture 2D image with gamma correction.

For more information about gamma correction, check out this article:
https://support.zivid.com/en/latest/camera/reference-articles/settings/2d-settings/gamma.html
*/

#include <Zivid/Zivid.h>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
/*
Perform Hand-Eye calibration.

For more information on Hand-Eye calibration, check out this tutorial:
https://support.zivid.com/en/latest/camera/academy/applications/hand-eye.html
*/

#include <Zivid/Application.h>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ millimeters. If your robot reports translation in meters, multiply it by 1000 be

The convenience functions from this example can be reused in applicable applications. The YAML files for this sample can
be found under the main instructions for Zivid samples.

For more information on pose conversions, check out this article:
https://support.zivid.com/en/latest/camera/reference-articles/pose-conversions.html
*/

#include <Zivid/Zivid.h>
Expand Down
146 changes: 1 addition & 145 deletions source/Applications/Advanced/HandEyeCalibration/README.md
Original file line number Diff line number Diff line change
@@ -1,147 +1,3 @@
# Hand-Eye Calibration

This page provides an overview of how to **perform**, **verify**, and **use Hand–Eye Calibration** with Zivid cameras.

If you are new to Hand–Eye Calibration, start with the [Hand–Eye Calibration – Concept & Theory][HandEyeTutorial-url], explaining:

- What Hand–Eye Calibration is
- The difference between **eye-in-hand** and **eye-to-hand**
- Best practices for dataset (point clouds and robot poses) acquisition

If you already know what you’re doing and just want to run calibration or check out our Hand-Eye calibration code, continue reading.

<!-- Use "Markdown All in One plugin in VS code to automatically generate and update TOC". -->

- [Quick Start: Just Calibrate](#quick-start-just-calibrate)
- [Programmatic Hand–Eye Calibration](#programmatic-handeye-calibration)
- [Using an Existing Hand–Eye Calibration](#using-an-existing-handeye-calibration)
- [Summary: Which Tool Should I Use?](#summary-which-tool-should-i-use)


---

## Quick Start: Just Calibrate

If your goal is **only to compute the Hand–Eye Transformation Matrix**, use one of the tools below and follow Zivid’s [best-practice guide for capture poses][ZividHandEyeCalibration-url].

### Hand–Eye Calibration GUI (Recommended)

**Note:** This is a **Python-based GUI application** (it is not related to the C++ samples).

- Tutorial: [Hand–Eye GUI Tutorial][HandEyeCalibrationGUITutorial-url]
- Application: [HandEyeCalibration GUI][HandEyeCalibrationGUI-url] (Python)

Best choice if you:

- Want a guided, no-code workflow

---

## Programmatic Hand–Eye Calibration

The following applications produce a Hand–Eye Transformation Matrix from robot poses and calibration captures.

### Minimal Hand-Eye Calibration Code Example

- Sample: [HandEyeCalibration][HandEyeCalibration-url]
- Tutorial: [Integrating Zivid Hand-Eye Calibration][hand-eye-procedure-url]

Workflow:

1. User inputs robot pose in the form of a 4x4 transformation matrix (manual entry)
2. Camera captures the calibration object
3. User moves the robot to a new capture pose and enters the command to add a new pose
4. First three steps are repeated (typically 10–20 pose pairs)
5. User enters the command to perform calibration and the application returns a Hand-Eye Transformation Matrix

Use this if you:

- Want the simplest integration example
- Are building your own calibration pipeline

---

### Hand Eye Calibration CLI Tool

- Tutorial: [Zivid CLI Tool for Hand–Eye Calibration][CLI application-url]
- Installed with:
- Windows Zivid installer
- `tools` deb package on Ubuntu

Use this if you:

- Already have a dataset (robot poses + point clouds)
- Want a command-line, batch-style workflow

---

## Using an Existing Hand–Eye Calibration

The following applications assume that a **Hand–Eye Transformation Matrix already exists**.

### Utilize Hand-Eye Calibration

- Sample: [UtilizeHandEyeCalibration][UtilizeHandEyeCalibration-url]
- Tutorial: [How To Use The Result Of Hand-Eye Calibration][UtilizeHandEyeCalibrationTutorial-url]

Demonstrates how to:

- Transform poses from camera coordinates to robot coordinates
- Use the transform in real applications (e.g., bin picking)

Example workflow:

1. Capture a point cloud with a Zivid camera
2. Find an object pick pose in camera coordinate system
3. Transform the pose into robot coordinate system
4. Plan and execute the robot motion

---

### Pose Conversions

- Sample: [PoseConversions][PoseConversions-url]
- Application: [PoseConversions GUI][PoseConversionsGUI-url] (Python)
- Theory: [Conversions Between Common Orientation Representations][PoseConversionsTheory-url]

Zivid primarily operates with a (4x4) Transformation Matrix (Rotation Matrix + Translation Vector). This example shows how to convert to and from:

- Axis–Angle
- Rotation Vector
- Roll–Pitch–Yaw
- Quaternion

Useful for integrating with robot controllers.

---

## Summary: Which Tool Should I Use?

| Goal | Recommended Tool |
|------|------------------|
| Conceptual understanding | [Knowledge Base article][HandEyeTutorial-url] |
| Guided calibration | [Hand–Eye GUI (Python)][HandEyeCalibrationGUITutorial-url] |
| Minimal integration example | [HandEyeCalibration][HandEyeCalibration-url] |
| Existing dataset | [Hand–Eye GUI (Python)][HandEyeCalibrationGUITutorial-url]|
| Use calibration result | [UtilizeHandEyeCalibration][UtilizeHandEyeCalibrationTutorial-url] |
| Verify visually | [Hand–Eye GUI (Python)][HandEyeCalibrationGUITutorial-url] |
| Verify physically | [Hand–Eye GUI][HandEyeCalibrationGUITutorial-url] |

[HandEyeTutorial-url]: https://support.zivid.com/latest/academy/applications/hand-eye.html

[HandEyeCalibration-url]: HandEyeCalibration/HandEyeCalibration.cpp

[HandEyeCalibrationGUI-url]: https://github.com/zivid/zivid-python-samples/blob/master/source/applications/advanced/hand_eye_calibration/hand_eye_gui.py
[HandEyeCalibrationGUITutorial-url]: https://support.zivid.com/en/latest/academy/applications/hand-eye/hand-eye-gui.html

[UtilizeHandEyeCalibration-url]: UtilizeHandEyeCalibration/UtilizeHandEyeCalibration.cpp
[UtilizeHandEyeCalibrationTutorial-url]: https://support.zivid.com/en/latest/academy/applications/hand-eye/how-to-use-the-result-of-hand-eye-calibration.html

[ZividHandEyeCalibration-url]: https://support.zivid.com/latest/academy/applications/hand-eye/hand-eye-calibration-process.html
[hand-eye-procedure-url]: https://support.zivid.com/en/latest/academy/applications/hand-eye/hand-eye-calibration-process.html#custom-integration

[PoseConversions-url]: PoseConversions/PoseConversions.cpp
[PoseConversionsGUI-url]: https://github.com/zivid/zivid-python-samples/blob/master/source/applications/advanced/hand_eye_calibration/pose_conversion_gui.py
[PoseConversionsTheory-url]: https://support.zivid.com/en/latest/reference-articles/pose-conversions.html

[CLI application-url]: https://support.zivid.com/latest/academy/applications/hand-eye/zivid_CLI_tool_for_hand_eye_calibration.html
> **Tutorial:** Read the full [Hand-Eye Calibration](https://support.zivid.com/en/latest/camera/academy/applications/hand-eye.html) tutorial on Zivid Knowledge Base.
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ Eye-In-Hand:
For verification, check that the Zivid gem centroid 3D coordinates are the same as above after the transformation.

The YAML files for this sample can be found under the main instructions for Zivid samples.

For more information on how to utilize Hand-Eye calibration results, check out this tutorial:
https://support.zivid.com/en/latest/camera/academy/applications/hand-eye/how-to-use-the-result-of-hand-eye-calibration.html
*/

#include <Zivid/Zivid.h>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
/*
Use captures of a calibration object to generate transformation matrices to a single coordinate frame, from connected cameras.
Use captures of a calibration object to generate transformation matrices to a single coordinate frame, from multiple connected cameras.

For more information on multi-camera calibration, check out this tutorial:
https://support.zivid.com/en/latest/camera/academy/applications/multi-camera-calibration.html
*/

#include <clipp.h>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
/*
Use captures of a calibration object to generate transformation matrices to a single coordinate frame, from a ZDF files.

For more information on multi-camera calibration, check out this tutorial:
https://support.zivid.com/en/latest/camera/academy/applications/multi-camera-calibration.html
*/

#include <clipp.h>
Expand Down
3 changes: 3 additions & 0 deletions source/Applications/Advanced/MultiCamera/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Multi-Camera Calibration

> **Tutorial:** Read the full [Multi-Camera Calibration](https://support.zivid.com/en/latest/camera/academy/applications/multi-camera-calibration.html) tutorial on Zivid Knowledge Base.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
Use transformation matrices from Multi-Camera calibration to transform point clouds into single coordinate frame, from connected cameras.

Note: This example uses experimental SDK features, which may be modified, moved, or deleted in the future without notice.

For more information on multi-camera calibration, check out this tutorial:
https://support.zivid.com/en/latest/camera/academy/applications/multi-camera-calibration.html
*/

#include <Zivid/Experimental/PointCloudExport.h>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
Use transformation matrices from Multi-Camera calibration to transform point clouds into single coordinate frame, from a ZDF files.

Note: This example uses experimental SDK features, which may be modified, moved, or deleted in the future without notice.

For more information on multi-camera calibration, check out the Multi-Camera Calibration tutorial:
https://support.zivid.com/en/latest/camera/academy/applications/multi-camera-calibration.html
*/

#include <Zivid/Experimental/PointCloudExport.h>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ Show a marker using the projector, capture a set of 2D images to find the marker
This example shows how a marker can be projected onto a surface using the built-in projector. A 2D capture with
zero brightness is then used to capture an image with the marker. Finally position of the marker is detected,
allowing us to find the 3D coordinates relative to the camera.

For more information on using the projector to project 2D images, check out this tutorial:
https://support.zivid.com/en/latest/camera/academy/camera/2d-image-projection.html
*/
#include <Zivid/Application.h>
#include <Zivid/CaptureAssistant.h>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ This sample is divided into two parts:
Projecting it using the camera projector.

The image for this sample can be found under the main instructions for Zivid samples.

For more information on using the projector to project 2D images, check out this tutorial:
https://support.zivid.com/en/latest/camera/academy/camera/2d-image-projection.html
*/

#include <Zivid/Application.h>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ and illuminating them with the projector.
The checkerboard feature points are first found through the API. These points are then used to get the
corresponding projector pixels. The projector pixel coordinates are then used to draw markers at the
correct locations before displaying the image using the projector.

For more information on using the projector to project 2D images, check out this tutorial:
https://support.zivid.com/en/latest/camera/academy/camera/2d-image-projection.html
*/

#include <Zivid/Application.h>
Expand Down
3 changes: 3 additions & 0 deletions source/Applications/Advanced/ROI/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Region of Interest

> **Tutorial:** Read the full [Region of Interest](https://support.zivid.com/en/latest/camera/academy/applications/roi.html) tutorial on Zivid Knowledge Base.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
Filter the point cloud based on a ROI box given relative to the ArUco marker on a Zivid Calibration Board.

The ZFC file for this sample can be downloaded from https://support.zivid.com/en/latest/api-reference/samples/sample-data.html.

For more information on Region-Of-Interest (ROI) and how to use it, check out this tutorial:
https://support.zivid.com/en/latest/camera/academy/applications/roi.html
*/

#include <Zivid/Visualization/Visualizer.h>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
Filter the point cloud based on a ROI box given relative to the Zivid Calibration Board.

The ZFC file for this sample can be downloaded from https://support.zivid.com/en/latest/api-reference/samples/sample-data.html.

For more information on Region-Of-Interest (ROI) and how to use it, check out this tutorial:
https://support.zivid.com/en/latest/camera/academy/applications/roi.html
*/

#include <Zivid/Calibration/Detector.h>
Expand Down
3 changes: 3 additions & 0 deletions source/Applications/Advanced/Stitching/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Stitching

> **Tutorial:** Read the full [Stitching](https://support.zivid.com/en/latest/camera/academy/applications/stitching.html) tutorial on Zivid Knowledge Base.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ The camera settings should have defined a region of interest box that removes un

Note: This example uses experimental SDK features, which may be modified, moved, or deleted in the future without notice.

For more information on stitching and point cloud registration, check out this tutorial:
https://support.zivid.com/en/latest/camera/academy/applications/stitching.html
*/

#include <Zivid/Experimental/LocalPointCloudRegistrationParameters.h>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ Extract the content into:
Each of these folders must contain ZDF captures, robot poses, and a hand-eye transform file.

Note: This example uses experimental SDK features, which may be modified, moved, or deleted in the future without notice.

For more information on stitching and point cloud registration, check out this tutorial:
https://support.zivid.com/en/latest/camera/academy/applications/stitching.html
*/

#include <Zivid/Experimental/LocalPointCloudRegistrationParameters.h>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ The folder must contain two ZDF files used for this sample.

Note: This example uses experimental SDK features, which may be modified, moved, or deleted in the future without notice.

For more information on stitching and point cloud registration, check out this tutorial:
https://support.zivid.com/en/latest/camera/academy/applications/stitching.html
*/

#include <Zivid/Experimental/LocalPointCloudRegistrationParameters.h>
Expand Down
3 changes: 3 additions & 0 deletions source/Applications/Advanced/Transform/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Transformations

> **Tutorial:** Read the full [Transformations](https://support.zivid.com/en/latest/camera/academy/applications/transformations.html) tutorial on Zivid Knowledge Base.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ Transform point cloud data from millimeters to meters.

The ZDF file for this sample can be found under the main instructions for Zivid samples.

For more information on transforming point clouds, check out this tutorial:
https://support.zivid.com/en/latest/camera/academy/applications/transformations.html
*/

#include <Zivid/Zivid.h>
Expand Down
Loading
Loading