diff --git a/README.md b/README.md index dbbca434..cf603f80 100644 --- a/README.md +++ b/README.md @@ -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 @@ -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. @@ -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] @@ -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 diff --git a/source/Applications/Advanced/Barcode/BarcodeDetector/BarcodeDetector.cpp b/source/Applications/Advanced/Barcode/BarcodeDetector/BarcodeDetector.cpp index 20e614f9..1eea793e 100644 --- a/source/Applications/Advanced/Barcode/BarcodeDetector/BarcodeDetector.cpp +++ b/source/Applications/Advanced/Barcode/BarcodeDetector/BarcodeDetector.cpp @@ -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 diff --git a/source/Applications/Advanced/Barcode/README.md b/source/Applications/Advanced/Barcode/README.md new file mode 100644 index 00000000..a232819e --- /dev/null +++ b/source/Applications/Advanced/Barcode/README.md @@ -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. diff --git a/source/Applications/Advanced/Downsample/Downsample.cpp b/source/Applications/Advanced/Downsample/Downsample.cpp index 125fcec1..39ff04c9 100644 --- a/source/Applications/Advanced/Downsample/Downsample.cpp +++ b/source/Applications/Advanced/Downsample/Downsample.cpp @@ -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 diff --git a/source/Applications/Advanced/GammaCorrection/GammaCorrection.cpp b/source/Applications/Advanced/GammaCorrection/GammaCorrection.cpp index 7e6b11da..0aefd969 100644 --- a/source/Applications/Advanced/GammaCorrection/GammaCorrection.cpp +++ b/source/Applications/Advanced/GammaCorrection/GammaCorrection.cpp @@ -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 diff --git a/source/Applications/Advanced/HandEyeCalibration/HandEyeCalibration/HandEyeCalibration.cpp b/source/Applications/Advanced/HandEyeCalibration/HandEyeCalibration/HandEyeCalibration.cpp index 637a8dc9..821cb935 100644 --- a/source/Applications/Advanced/HandEyeCalibration/HandEyeCalibration/HandEyeCalibration.cpp +++ b/source/Applications/Advanced/HandEyeCalibration/HandEyeCalibration/HandEyeCalibration.cpp @@ -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 diff --git a/source/Applications/Advanced/HandEyeCalibration/PoseConversions/PoseConversions.cpp b/source/Applications/Advanced/HandEyeCalibration/PoseConversions/PoseConversions.cpp index 4a9a8d0b..bea0efbf 100644 --- a/source/Applications/Advanced/HandEyeCalibration/PoseConversions/PoseConversions.cpp +++ b/source/Applications/Advanced/HandEyeCalibration/PoseConversions/PoseConversions.cpp @@ -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 diff --git a/source/Applications/Advanced/HandEyeCalibration/README.md b/source/Applications/Advanced/HandEyeCalibration/README.md index 1f8053d7..959f8dc4 100644 --- a/source/Applications/Advanced/HandEyeCalibration/README.md +++ b/source/Applications/Advanced/HandEyeCalibration/README.md @@ -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. - - - -- [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. diff --git a/source/Applications/Advanced/HandEyeCalibration/UtilizeHandEyeCalibration/UtilizeHandEyeCalibration.cpp b/source/Applications/Advanced/HandEyeCalibration/UtilizeHandEyeCalibration/UtilizeHandEyeCalibration.cpp index c266e1df..70feb47b 100644 --- a/source/Applications/Advanced/HandEyeCalibration/UtilizeHandEyeCalibration/UtilizeHandEyeCalibration.cpp +++ b/source/Applications/Advanced/HandEyeCalibration/UtilizeHandEyeCalibration/UtilizeHandEyeCalibration.cpp @@ -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 diff --git a/source/Applications/Advanced/MultiCamera/MultiCameraCalibration/MultiCameraCalibration.cpp b/source/Applications/Advanced/MultiCamera/MultiCameraCalibration/MultiCameraCalibration.cpp index 436a7aeb..1bfde348 100644 --- a/source/Applications/Advanced/MultiCamera/MultiCameraCalibration/MultiCameraCalibration.cpp +++ b/source/Applications/Advanced/MultiCamera/MultiCameraCalibration/MultiCameraCalibration.cpp @@ -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 diff --git a/source/Applications/Advanced/MultiCamera/MultiCameraCalibrationFromZDF/MultiCameraCalibrationFromZDF.cpp b/source/Applications/Advanced/MultiCamera/MultiCameraCalibrationFromZDF/MultiCameraCalibrationFromZDF.cpp index ab674d83..3cea3a6a 100644 --- a/source/Applications/Advanced/MultiCamera/MultiCameraCalibrationFromZDF/MultiCameraCalibrationFromZDF.cpp +++ b/source/Applications/Advanced/MultiCamera/MultiCameraCalibrationFromZDF/MultiCameraCalibrationFromZDF.cpp @@ -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 diff --git a/source/Applications/Advanced/MultiCamera/README.md b/source/Applications/Advanced/MultiCamera/README.md new file mode 100644 index 00000000..753e3b4b --- /dev/null +++ b/source/Applications/Advanced/MultiCamera/README.md @@ -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. diff --git a/source/Applications/Advanced/MultiCamera/StitchByTransformation/StitchByTransformation.cpp b/source/Applications/Advanced/MultiCamera/StitchByTransformation/StitchByTransformation.cpp index 03a5b455..0923fb37 100644 --- a/source/Applications/Advanced/MultiCamera/StitchByTransformation/StitchByTransformation.cpp +++ b/source/Applications/Advanced/MultiCamera/StitchByTransformation/StitchByTransformation.cpp @@ -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 diff --git a/source/Applications/Advanced/MultiCamera/StitchByTransformationFromZDF/StitchByTransformationFromZDF.cpp b/source/Applications/Advanced/MultiCamera/StitchByTransformationFromZDF/StitchByTransformationFromZDF.cpp index df74d8d3..92bbc868 100644 --- a/source/Applications/Advanced/MultiCamera/StitchByTransformationFromZDF/StitchByTransformationFromZDF.cpp +++ b/source/Applications/Advanced/MultiCamera/StitchByTransformationFromZDF/StitchByTransformationFromZDF.cpp @@ -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 diff --git a/source/Applications/Advanced/Projector/ProjectAndFindMarker/ProjectAndFindMarker.cpp b/source/Applications/Advanced/Projector/ProjectAndFindMarker/ProjectAndFindMarker.cpp index feb59d2c..530cefd4 100644 --- a/source/Applications/Advanced/Projector/ProjectAndFindMarker/ProjectAndFindMarker.cpp +++ b/source/Applications/Advanced/Projector/ProjectAndFindMarker/ProjectAndFindMarker.cpp @@ -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 #include diff --git a/source/Applications/Advanced/Projector/ReadProjectAndCaptureImage/ReadProjectAndCaptureImage.cpp b/source/Applications/Advanced/Projector/ReadProjectAndCaptureImage/ReadProjectAndCaptureImage.cpp index 104fe157..4fbb0940 100644 --- a/source/Applications/Advanced/Projector/ReadProjectAndCaptureImage/ReadProjectAndCaptureImage.cpp +++ b/source/Applications/Advanced/Projector/ReadProjectAndCaptureImage/ReadProjectAndCaptureImage.cpp @@ -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 diff --git a/source/Applications/Advanced/Projector/ReprojectPoints/ReprojectPoints.cpp b/source/Applications/Advanced/Projector/ReprojectPoints/ReprojectPoints.cpp index 1c069bc2..9eea4374 100644 --- a/source/Applications/Advanced/Projector/ReprojectPoints/ReprojectPoints.cpp +++ b/source/Applications/Advanced/Projector/ReprojectPoints/ReprojectPoints.cpp @@ -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 diff --git a/source/Applications/Advanced/ROI/README.md b/source/Applications/Advanced/ROI/README.md new file mode 100644 index 00000000..336e95f4 --- /dev/null +++ b/source/Applications/Advanced/ROI/README.md @@ -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. diff --git a/source/Applications/Advanced/ROI/ROIBoxViaArucoMarker/ROIBoxViaArucoMarker.cpp b/source/Applications/Advanced/ROI/ROIBoxViaArucoMarker/ROIBoxViaArucoMarker.cpp index 3fb34156..87b8e082 100644 --- a/source/Applications/Advanced/ROI/ROIBoxViaArucoMarker/ROIBoxViaArucoMarker.cpp +++ b/source/Applications/Advanced/ROI/ROIBoxViaArucoMarker/ROIBoxViaArucoMarker.cpp @@ -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 diff --git a/source/Applications/Advanced/ROI/ROIBoxViaCheckerboard/ROIBoxViaCheckerboard.cpp b/source/Applications/Advanced/ROI/ROIBoxViaCheckerboard/ROIBoxViaCheckerboard.cpp index 63bcde2c..c690de14 100644 --- a/source/Applications/Advanced/ROI/ROIBoxViaCheckerboard/ROIBoxViaCheckerboard.cpp +++ b/source/Applications/Advanced/ROI/ROIBoxViaCheckerboard/ROIBoxViaCheckerboard.cpp @@ -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 diff --git a/source/Applications/Advanced/Stitching/README.md b/source/Applications/Advanced/Stitching/README.md new file mode 100644 index 00000000..bc4e1f0c --- /dev/null +++ b/source/Applications/Advanced/Stitching/README.md @@ -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. diff --git a/source/Applications/Advanced/Stitching/StitchContinuouslyRotatingObject/StitchContinuouslyRotatingObject.cpp b/source/Applications/Advanced/Stitching/StitchContinuouslyRotatingObject/StitchContinuouslyRotatingObject.cpp index 90e49251..a721c35b 100644 --- a/source/Applications/Advanced/Stitching/StitchContinuouslyRotatingObject/StitchContinuouslyRotatingObject.cpp +++ b/source/Applications/Advanced/Stitching/StitchContinuouslyRotatingObject/StitchContinuouslyRotatingObject.cpp @@ -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 diff --git a/source/Applications/Advanced/Stitching/StitchUsingRobotMountedCamera/StitchUsingRobotMountedCamera.cpp b/source/Applications/Advanced/Stitching/StitchUsingRobotMountedCamera/StitchUsingRobotMountedCamera.cpp index 3eef0ef6..8f3886db 100644 --- a/source/Applications/Advanced/Stitching/StitchUsingRobotMountedCamera/StitchUsingRobotMountedCamera.cpp +++ b/source/Applications/Advanced/Stitching/StitchUsingRobotMountedCamera/StitchUsingRobotMountedCamera.cpp @@ -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 diff --git a/source/Applications/Advanced/Stitching/StitchViaLocalPointCloudRegistration/StitchViaLocalPointCloudRegistration.cpp b/source/Applications/Advanced/Stitching/StitchViaLocalPointCloudRegistration/StitchViaLocalPointCloudRegistration.cpp index 3e437234..524d11d2 100644 --- a/source/Applications/Advanced/Stitching/StitchViaLocalPointCloudRegistration/StitchViaLocalPointCloudRegistration.cpp +++ b/source/Applications/Advanced/Stitching/StitchViaLocalPointCloudRegistration/StitchViaLocalPointCloudRegistration.cpp @@ -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 diff --git a/source/Applications/Advanced/Transform/README.md b/source/Applications/Advanced/Transform/README.md new file mode 100644 index 00000000..81f2327e --- /dev/null +++ b/source/Applications/Advanced/Transform/README.md @@ -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. diff --git a/source/Applications/Advanced/Transform/TransformPointCloudFromMillimetersToMeters/TransformPointCloudFromMillimetersToMeters.cpp b/source/Applications/Advanced/Transform/TransformPointCloudFromMillimetersToMeters/TransformPointCloudFromMillimetersToMeters.cpp index 5d8c8b7a..3f875e80 100644 --- a/source/Applications/Advanced/Transform/TransformPointCloudFromMillimetersToMeters/TransformPointCloudFromMillimetersToMeters.cpp +++ b/source/Applications/Advanced/Transform/TransformPointCloudFromMillimetersToMeters/TransformPointCloudFromMillimetersToMeters.cpp @@ -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 diff --git a/source/Applications/Advanced/Transform/TransformPointCloudViaArucoMarker/TransformPointCloudViaArucoMarker.cpp b/source/Applications/Advanced/Transform/TransformPointCloudViaArucoMarker/TransformPointCloudViaArucoMarker.cpp index 79bebc40..377a8c37 100644 --- a/source/Applications/Advanced/Transform/TransformPointCloudViaArucoMarker/TransformPointCloudViaArucoMarker.cpp +++ b/source/Applications/Advanced/Transform/TransformPointCloudViaArucoMarker/TransformPointCloudViaArucoMarker.cpp @@ -2,11 +2,17 @@ Transform a point cloud from camera to ArUco marker coordinate frame by estimating the marker's pose from the point cloud. The ZDF file for this sample can be found under the main instructions for Zivid samples. + +Note: This example uses experimental SDK features, which may be modified, moved, or deleted in the future without notice. + +For more information on transforming point clouds, check out this tutorial: +https://support.zivid.com/en/latest/camera/academy/applications/transformations.html */ +#include #include -#include +#include #include #include #include @@ -17,7 +23,7 @@ The ZDF file for this sample can be found under the main instructions for Zivid template<> struct cv::DataType { - using channel_type = Zivid::ColorBGRA::ValueType; + using channel_type = Zivid::ColorBGRA_SRGB::ValueType; }; template<> @@ -65,6 +71,113 @@ namespace return bgr; } + struct CoordinateSystemPoints + { + cv::Point2d originPoint; + cv::Point2d xAxisPoint; + cv::Point2d yAxisPoint; + cv::Point2d zAxisPoint; + }; + + void coordinateSystemLine( + const cv::Mat &img, + const cv::Point2d &firstPoint, + const cv::Point2d &secondPoint, + const cv::Scalar &lineColor) + { + int lineThickness = 4; + int lineType = cv::LineTypes::LINE_8; + line(img, firstPoint, secondPoint, lineColor, lineThickness, lineType); + } + + cv::Matx33d zividPoseToOpenCVRotation(const Zivid::Matrix4x4 &matrix) + { + cv::Matx33d cvMat; + for(std::size_t row = 0; row < cv::Matx33d::rows; row++) + { + for(std::size_t column = 0; column < cv::Matx33d::cols; column++) + { + cvMat(row, column) = matrix(row, column); + } + } + return cvMat; + } + + cv::Matx33d zividCameraMatrixToOpenCVCameraMatrix(const Zivid::CameraIntrinsics::CameraMatrix &cameraMatrix) + { + return { cameraMatrix.fx().value(), + 0.0, + cameraMatrix.cx().value(), + 0.0, + cameraMatrix.fy().value(), + cameraMatrix.cy().value(), + 0.0, + 0.0, + 1 }; + } + + std::vector zividDistortionCoefficientsToOpenCVDistortionCoefficients( + const Zivid::CameraIntrinsics::Distortion &distortionCoeffs) + { + return { distortionCoeffs.k1().value(), + distortionCoeffs.k2().value(), + distortionCoeffs.p1().value(), + distortionCoeffs.p2().value(), + distortionCoeffs.k3().value() }; + } + + cv::Point3d movePoint( + const cv::Point3d &originInCameraFrame, + const cv::Point3d &offsetInMarkerFrame, + const Zivid::Matrix4x4 &markerPose) + { + const cv::Matx33d rotationMatrix = zividPoseToOpenCVRotation(markerPose); + const auto offsetRotated = rotationMatrix * offsetInMarkerFrame; + return { + originInCameraFrame.x + offsetRotated.x, + originInCameraFrame.y + offsetRotated.y, + originInCameraFrame.z + offsetRotated.z, + }; + } + + CoordinateSystemPoints + getCoordinateSystemPoints(const Zivid::Frame &frame, const Zivid::Matrix4x4 &markerPose, float sizeOfAxis) + { + const auto intrinsics = Zivid::Experimental::Calibration::estimateIntrinsics(frame); + const auto cvCameraMatrix = zividCameraMatrixToOpenCVCameraMatrix(intrinsics.cameraMatrix()); + const auto cvDistCoeffs = zividDistortionCoefficientsToOpenCVDistortionCoefficients(intrinsics.distortion()); + const cv::Point3d originPosition = { markerPose.at(0, 3), markerPose.at(1, 3), markerPose.at(2, 3) }; + const cv::Point3d xAxisDirection = movePoint(originPosition, { sizeOfAxis, 0.0, 0.0 }, markerPose); + const cv::Point3d yAxisDirection = movePoint(originPosition, { 0.0, sizeOfAxis, 0.0 }, markerPose); + const cv::Point3d zAxisDirection = movePoint(originPosition, { 0.0, 0.0, sizeOfAxis }, markerPose); + + std::vector pointsToProject{ originPosition, xAxisDirection, yAxisDirection, zAxisDirection }; + std::vector projectedPoints; + projectedPoints.reserve(4); + const cv::Vec3d tvec{ 0, 0, 0 }; + const cv::Vec3d rvec{ 0, 0, 0 }; + cv::projectPoints(pointsToProject, rvec, tvec, cvCameraMatrix, cvDistCoeffs, projectedPoints); + + return { projectedPoints.at(0), projectedPoints.at(1), projectedPoints.at(2), projectedPoints.at(3) }; + } + + void drawCoordinateSystem(const Zivid::Frame &frame, const Zivid::Matrix4x4 &markerPose, const cv::Mat &bgrImage) + { + const float sizeOfAxis = 30.0; // each axis has 30[mm] of length + + std::cout << "Acquiring frame points" << std::endl; + auto framePoints = getCoordinateSystemPoints(frame, markerPose, sizeOfAxis); + + std::cout << "Drawing Z axis" << std::endl; + coordinateSystemLine(bgrImage, framePoints.originPoint, framePoints.zAxisPoint, cv::Scalar(255, 0, 0)); + + std::cout << "Drawing Y axis" << std::endl; + coordinateSystemLine(bgrImage, framePoints.originPoint, framePoints.yAxisPoint, cv::Scalar(0, 255, 0)); + + std::cout << "Drawing X axis" << std::endl; + coordinateSystemLine(bgrImage, framePoints.originPoint, framePoints.xAxisPoint, cv::Scalar(0, 0, 255)); + } + } // namespace int main() @@ -103,13 +216,19 @@ int main() cv::imwrite(bgrImageFile, bgr); std::cout << "Estimating pose of detected ArUco marker" << std::endl; - const auto transformCameraToMarker = detectionResult.detectedMarkers()[0].pose().toMatrix(); + const auto cameraToMarkerTransform = detectionResult.detectedMarkers()[0].pose().toMatrix(); std::cout << "ArUco marker pose in camera frame:" << std::endl; - std::cout << transformCameraToMarker << std::endl; + std::cout << cameraToMarkerTransform << std::endl; std::cout << "Camera pose in ArUco marker frame:" << std::endl; - const auto markerToCameraTransform = transformCameraToMarker.inverse(); + const auto markerToCameraTransform = cameraToMarkerTransform.inverse(); std::cout << markerToCameraTransform << std::endl; + std::cout << "Visualizing ArUco marker with coordinate system" << std::endl; + cv::Mat bgrCoordinateSystem; + cv::cvtColor(bgraImage, bgrCoordinateSystem, cv::COLOR_BGRA2BGR); + drawCoordinateSystem(frame, cameraToMarkerTransform, bgrCoordinateSystem); + displayBGR(bgrCoordinateSystem, "ArUco marker transformation frame"); + const auto transformFile = "ArUcoMarkerToCameraTransform.yaml"; std::cout << "Saving a YAML file with Inverted ArUco marker pose to file: " << transformFile << std::endl; markerToCameraTransform.save(transformFile); diff --git a/source/Applications/Advanced/Transform/TransformPointCloudViaCheckerboard/TransformPointCloudViaCheckerboard.cpp b/source/Applications/Advanced/Transform/TransformPointCloudViaCheckerboard/TransformPointCloudViaCheckerboard.cpp index f6a6ac0d..6b97d598 100644 --- a/source/Applications/Advanced/Transform/TransformPointCloudViaCheckerboard/TransformPointCloudViaCheckerboard.cpp +++ b/source/Applications/Advanced/Transform/TransformPointCloudViaCheckerboard/TransformPointCloudViaCheckerboard.cpp @@ -4,6 +4,9 @@ Transform a point cloud from camera to checkerboard (Zivid Calibration Board) co The ZDF file for this sample can be found under the main instructions for Zivid samples. Note: This example uses experimental SDK features, which may be modified, moved, or deleted in the future without notice. + +For more information on transforming point clouds, check out this tutorial: +https://support.zivid.com/en/latest/camera/academy/applications/transformations.html */ #include @@ -47,10 +50,10 @@ namespace return bgra; } - void displayBGRA(const cv::Mat &bgra, const std::string &bgraName) + void displayBGR(const cv::Mat &bgr, const std::string &bgrName) { - cv::namedWindow(bgraName, cv::WINDOW_AUTOSIZE); - cv::imshow(bgraName, bgra); + cv::namedWindow(bgrName, cv::WINDOW_AUTOSIZE); + cv::imshow(bgrName, bgr); cv::waitKey(CI_WAITKEY_TIMEOUT_IN_MS); } @@ -104,9 +107,9 @@ namespace cv::Point3d movePoint( const cv::Point3d &originInCameraFrame, const cv::Point3d &offsetInBoardFrame, - const Zivid::Matrix4x4 &checkerBoardPose) + const Zivid::Matrix4x4 &checkerboardPose) { - const cv::Matx33d rotationMatrix = zividPoseToOpenCVRotation(checkerBoardPose); + const cv::Matx33d rotationMatrix = zividPoseToOpenCVRotation(checkerboardPose); const auto offsetRotated = rotationMatrix * offsetInBoardFrame; return { originInCameraFrame.x + offsetRotated.x, @@ -116,7 +119,7 @@ namespace } CoordinateSystemPoints - getCoordinateSystemPoints(const Zivid::Frame &frame, const Zivid::Matrix4x4 &checkerboardPose, float size_of_axis) + getCoordinateSystemPoints(const Zivid::Frame &frame, const Zivid::Matrix4x4 &checkerboardPose, float sizeOfAxis) { const auto intrinsics = Zivid::Experimental::Calibration::estimateIntrinsics(frame); const auto cvCameraMatrix = zividCameraMatrixToOpenCVCameraMatrix(intrinsics.cameraMatrix()); @@ -124,11 +127,11 @@ namespace const cv::Point3d originPosition = { checkerboardPose.at(0, 3), checkerboardPose.at(1, 3), checkerboardPose.at(2, 3) }; - const cv::Point3d xAxisDirection = movePoint(originPosition, { size_of_axis, 0.0, 0.0 }, checkerboardPose); - const cv::Point3d yAxisDirection = movePoint(originPosition, { 0.0, size_of_axis, 0.0 }, checkerboardPose); - const cv::Point3d zAxizDirection = movePoint(originPosition, { 0.0, 0.0, size_of_axis }, checkerboardPose); + const cv::Point3d xAxisDirection = movePoint(originPosition, { sizeOfAxis, 0.0, 0.0 }, checkerboardPose); + const cv::Point3d yAxisDirection = movePoint(originPosition, { 0.0, sizeOfAxis, 0.0 }, checkerboardPose); + const cv::Point3d zAxisDirection = movePoint(originPosition, { 0.0, 0.0, sizeOfAxis }, checkerboardPose); - std::vector pointsToProject{ originPosition, xAxisDirection, yAxisDirection, zAxizDirection }; + std::vector pointsToProject{ originPosition, xAxisDirection, yAxisDirection, zAxisDirection }; std::vector projectedPoints; projectedPoints.reserve(4); const cv::Vec3d tvec{ 0, 0, 0 }; @@ -141,9 +144,9 @@ namespace void drawCoordinateSystem(const Zivid::Frame &frame, const Zivid::Matrix4x4 &checkerboardPose, const cv::Mat &bgrImage) { - const float sizeOfAxis = 30.0; // each axis have 30[mm] of length + const float sizeOfAxis = 30.0; // each axis has 30[mm] of length - std::cout << "Aquiring frame points" << std::endl; + std::cout << "Acquiring frame points" << std::endl; auto framePoints = getCoordinateSystemPoints(frame, checkerboardPose, sizeOfAxis); std::cout << "Drawing Z axis" << std::endl; @@ -171,6 +174,10 @@ int main() std::cout << "Detecting and estimating pose of the Zivid checkerboard in the camera frame" << std::endl; const auto detectionResult = Zivid::Calibration::detectCalibrationBoard(frame); + if(!detectionResult.valid()) + { + throw std::runtime_error("No checkerboard detected. " + detectionResult.statusDescription()); + } const auto cameraToCheckerboardTransform = detectionResult.pose().toMatrix(); std::cout << cameraToCheckerboardTransform << std::endl; std::cout << "Camera pose in checkerboard frame:" << std::endl; @@ -188,8 +195,14 @@ int main() const auto bgraImage = pointCloudToColorBGRA_SRGB(pointCloud); std::cout << "Visualizing checkerboard with coordinate system" << std::endl; - drawCoordinateSystem(frame, cameraToCheckerboardTransform, bgraImage); - displayBGRA(bgraImage, "Checkerboard transformation frame"); + cv::Mat bgrCoordinateSystem; + cv::cvtColor(bgraImage, bgrCoordinateSystem, cv::COLOR_BGRA2BGR); + drawCoordinateSystem(frame, cameraToCheckerboardTransform, bgrCoordinateSystem); + displayBGR(bgrCoordinateSystem, "Checkerboard transformation frame"); + + const auto bgrImageFile = "CheckerboardCoordinateSystem.png"; + std::cout << "Saving 2D color image with coordinate system to file: " << bgrImageFile << std::endl; + cv::imwrite(bgrImageFile, bgrCoordinateSystem); const auto checkerboardTransformedFile = "CalibrationBoardInCheckerboardOrigin.zdf"; std::cout << "Saving transformed point cloud to file: " << checkerboardTransformedFile << std::endl; diff --git a/source/Applications/Basic/FileFormats/ConvertZDF/ConvertZDF.cpp b/source/Applications/Basic/FileFormats/ConvertZDF/ConvertZDF.cpp index d10900c3..96fb9d04 100644 --- a/source/Applications/Basic/FileFormats/ConvertZDF/ConvertZDF.cpp +++ b/source/Applications/Basic/FileFormats/ConvertZDF/ConvertZDF.cpp @@ -5,6 +5,9 @@ If a directory is provided, all ZDF files in the directory will be converted Available formats: PLY, PCD, XYZ, CSV, TXT - 3D point cloud PNG, JPG, BMP - 2D RGB image + +For more information on supported formats and options, check out this article: +https://support.zivid.com/en/latest/camera/reference-articles/point-cloud-structure-and-output-formats.html */ #include diff --git a/source/Applications/Basic/FileFormats/ReadIterateZDF/ReadIterateZDF.cpp b/source/Applications/Basic/FileFormats/ReadIterateZDF/ReadIterateZDF.cpp index 4fe37487..89550a38 100644 --- a/source/Applications/Basic/FileFormats/ReadIterateZDF/ReadIterateZDF.cpp +++ b/source/Applications/Basic/FileFormats/ReadIterateZDF/ReadIterateZDF.cpp @@ -2,6 +2,9 @@ Read point cloud data from a ZDF file, iterate through it, and extract individual points. The ZDF file for this sample can be found under the main instructions for Zivid samples. + +For more information on supported formats and options, check out this article: +https://support.zivid.com/en/latest/camera/reference-articles/point-cloud-structure-and-output-formats.html */ #include diff --git a/source/Applications/Basic/Visualization/CaptureAndVisualizeNormals/CaptureAndVisualizeNormals.cpp b/source/Applications/Basic/Visualization/CaptureAndVisualizeNormals/CaptureAndVisualizeNormals.cpp index aab846b0..1b891cb0 100644 --- a/source/Applications/Basic/Visualization/CaptureAndVisualizeNormals/CaptureAndVisualizeNormals.cpp +++ b/source/Applications/Basic/Visualization/CaptureAndVisualizeNormals/CaptureAndVisualizeNormals.cpp @@ -1,5 +1,8 @@ /* Capture Zivid point clouds, with color and normals, and visualize it in 3D and as a normal map. + +For more information on computing point cloud normals, check out this tutorial: +https://support.zivid.com/en/latest/camera/academy/applications/normals.html */ #include diff --git a/source/Applications/Basic/Visualization/CaptureFromFileCameraVis3D/CaptureFromFileCameraVis3D.cpp b/source/Applications/Basic/Visualization/CaptureFromFileCameraVis3D/CaptureFromFileCameraVis3D.cpp index ff162a3d..d171d47f 100644 --- a/source/Applications/Basic/Visualization/CaptureFromFileCameraVis3D/CaptureFromFileCameraVis3D.cpp +++ b/source/Applications/Basic/Visualization/CaptureFromFileCameraVis3D/CaptureFromFileCameraVis3D.cpp @@ -6,6 +6,9 @@ The file camera files are found in Zivid Sample Data with ZFC file extension. See the instructions in README.md to download the Zivid Sample Data. There are five available file cameras to choose from, one for each camera model. The default file camera used in this sample is the Zivid 2 M70 file camera. + +For more information about file cameras, check out this tutorial: +https://support.zivid.com/en/latest/camera/academy/camera/file-camera.html */ #include diff --git a/source/Applications/Basic/Visualization/CaptureVis3D/CaptureVis3D.cpp b/source/Applications/Basic/Visualization/CaptureVis3D/CaptureVis3D.cpp index 78e69d80..0e639db6 100644 --- a/source/Applications/Basic/Visualization/CaptureVis3D/CaptureVis3D.cpp +++ b/source/Applications/Basic/Visualization/CaptureVis3D/CaptureVis3D.cpp @@ -1,5 +1,8 @@ /* Capture point clouds, with color, from the Zivid camera, and visualize it. + +For more information on visualization, check out this tutorial: +https://support.zivid.com/en/latest/camera/academy/applications/visualization-tutorial.html */ #include diff --git a/source/Applications/Basic/Visualization/CaptureWritePCLVis3D/CaptureWritePCLVis3D.cpp b/source/Applications/Basic/Visualization/CaptureWritePCLVis3D/CaptureWritePCLVis3D.cpp index cda772b6..01dcc1b7 100644 --- a/source/Applications/Basic/Visualization/CaptureWritePCLVis3D/CaptureWritePCLVis3D.cpp +++ b/source/Applications/Basic/Visualization/CaptureWritePCLVis3D/CaptureWritePCLVis3D.cpp @@ -1,5 +1,8 @@ /* Capture point clouds, with color, from the Zivid camera, save it to PCD file format, and visualize it. + +For more information on visualization, check out this tutorial: +https://support.zivid.com/en/latest/camera/academy/applications/visualization-tutorial.html */ #include diff --git a/source/Applications/Basic/Visualization/ProjectImageStartAndStop/ProjectImageStartAndStop.cpp b/source/Applications/Basic/Visualization/ProjectImageStartAndStop/ProjectImageStartAndStop.cpp index e709a43d..1318b5de 100644 --- a/source/Applications/Basic/Visualization/ProjectImageStartAndStop/ProjectImageStartAndStop.cpp +++ b/source/Applications/Basic/Visualization/ProjectImageStartAndStop/ProjectImageStartAndStop.cpp @@ -6,6 +6,8 @@ How to stop the image projection is demonstrated in three different ways: - projected image handle going out of scope - triggering a 3D capture +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 diff --git a/source/Applications/Basic/Visualization/README.md b/source/Applications/Basic/Visualization/README.md new file mode 100644 index 00000000..81a0352a --- /dev/null +++ b/source/Applications/Basic/Visualization/README.md @@ -0,0 +1,3 @@ +# Visualization + +> **Tutorial:** Read the full [Visualization](https://support.zivid.com/en/latest/camera/academy/applications/visualization-tutorial.html) tutorial on Zivid Knowledge Base. diff --git a/source/Applications/Basic/Visualization/ReadPCLVis3D/ReadPCLVis3D.cpp b/source/Applications/Basic/Visualization/ReadPCLVis3D/ReadPCLVis3D.cpp index ef8317cd..dd2b135f 100644 --- a/source/Applications/Basic/Visualization/ReadPCLVis3D/ReadPCLVis3D.cpp +++ b/source/Applications/Basic/Visualization/ReadPCLVis3D/ReadPCLVis3D.cpp @@ -2,6 +2,9 @@ Read point cloud from PCL file and visualize it. The PCD file for this sample can be found under the main instructions for Zivid samples. + +For more information on visualization, check out this tutorial: +https://support.zivid.com/en/latest/camera/academy/applications/visualization-tutorial.html */ #include diff --git a/source/Applications/README.md b/source/Applications/README.md new file mode 100644 index 00000000..ce8f1f3e --- /dev/null +++ b/source/Applications/README.md @@ -0,0 +1,3 @@ +# Applications + +> **Tutorials:** Read the [Applications](https://support.zivid.com/en/latest/camera/academy/applications.html) tutorials on Zivid Knowledge Base. diff --git a/source/Camera/Advanced/AllocateMemoryForPointCloudData/AllocateMemoryForPointCloudData.cpp b/source/Camera/Advanced/AllocateMemoryForPointCloudData/AllocateMemoryForPointCloudData.cpp index 14935a8e..bef857c9 100644 --- a/source/Camera/Advanced/AllocateMemoryForPointCloudData/AllocateMemoryForPointCloudData.cpp +++ b/source/Camera/Advanced/AllocateMemoryForPointCloudData/AllocateMemoryForPointCloudData.cpp @@ -5,6 +5,9 @@ occurs. With the second method, the memory is allocated post-capture by Zivid SD Note: This example uses experimental SDK features, which may be modified, moved, or deleted in the future without notice. + +For more information about working with point cloud data, check out this tutorial: +https://support.zivid.com/en/latest/camera/academy/applications/point-cloud-tutorial.html */ #include diff --git a/source/Camera/Advanced/Capture2DAnd3D/Capture2DAnd3D.cpp b/source/Camera/Advanced/Capture2DAnd3D/Capture2DAnd3D.cpp index a8d923c5..c9dc103e 100644 --- a/source/Camera/Advanced/Capture2DAnd3D/Capture2DAnd3D.cpp +++ b/source/Camera/Advanced/Capture2DAnd3D/Capture2DAnd3D.cpp @@ -3,6 +3,9 @@ Capture 2D and 3D with the Zivid camera. Capture separate 2D and 3D with different sampling modes based on camera model. Then use color from 2D when visualizing the 3D point cloud. + +For more information about capture strategy, check out this tutorial: +https://support.zivid.com/en/latest/camera/academy/camera/2d3d-capture-strategy.html */ #include diff --git a/source/Camera/Advanced/CaptureAndPrintNormals/CaptureAndPrintNormals.cpp b/source/Camera/Advanced/CaptureAndPrintNormals/CaptureAndPrintNormals.cpp index 8f104cdf..cc1ad0a4 100644 --- a/source/Camera/Advanced/CaptureAndPrintNormals/CaptureAndPrintNormals.cpp +++ b/source/Camera/Advanced/CaptureAndPrintNormals/CaptureAndPrintNormals.cpp @@ -1,5 +1,8 @@ /* Capture Zivid point clouds, compute normals and print a subset. + +For more information on computing point cloud normals, check out this tutorial: +https://support.zivid.com/en/latest/camera/academy/applications/normals.html */ #include diff --git a/source/Camera/Advanced/CaptureHalconViaGenICam/CaptureHalconViaGenICam.cpp b/source/Camera/Advanced/CaptureHalconViaGenICam/CaptureHalconViaGenICam.cpp index dff8da73..fb0dafd0 100644 --- a/source/Camera/Advanced/CaptureHalconViaGenICam/CaptureHalconViaGenICam.cpp +++ b/source/Camera/Advanced/CaptureHalconViaGenICam/CaptureHalconViaGenICam.cpp @@ -1,5 +1,8 @@ /* Capture and save a point cloud, with colors, using GenICam interface and Halcon C++ SDK. + +For more information about interfacing Zivid with Halcon, check out this article: +https://support.zivid.com/en/latest/camera/api-reference/samples/halcon.html#instructions */ #include diff --git a/source/Camera/Advanced/CaptureHalconViaZivid/CaptureHalconViaZivid.cpp b/source/Camera/Advanced/CaptureHalconViaZivid/CaptureHalconViaZivid.cpp index c54a0b89..a02efa55 100644 --- a/source/Camera/Advanced/CaptureHalconViaZivid/CaptureHalconViaZivid.cpp +++ b/source/Camera/Advanced/CaptureHalconViaZivid/CaptureHalconViaZivid.cpp @@ -1,5 +1,8 @@ /* Capture a point cloud, with colors, using Zivid SDK, transform it to a Halcon point cloud and save it using Halcon C++ SDK. + +For more information about interfacing Zivid with Halcon, check out this article: +https://support.zivid.com/en/latest/camera/api-reference/samples/halcon.html#instructions */ #include diff --git a/source/Camera/Advanced/MultiCamera/MultiCameraCaptureInParallel/MultiCameraCaptureInParallel.cpp b/source/Camera/Advanced/MultiCamera/MultiCameraCaptureInParallel/MultiCameraCaptureInParallel.cpp index 257c6323..b966e4a9 100644 --- a/source/Camera/Advanced/MultiCamera/MultiCameraCaptureInParallel/MultiCameraCaptureInParallel.cpp +++ b/source/Camera/Advanced/MultiCamera/MultiCameraCaptureInParallel/MultiCameraCaptureInParallel.cpp @@ -1,5 +1,8 @@ /* Capture point clouds with multiple cameras in parallel. + +For more information about simultaneously operating multiple cameras, check out this tutorial: +https://support.zivid.com/en/latest/camera/academy/camera/multiple-zivid-cameras.html */ #include diff --git a/source/Camera/Advanced/MultiCamera/MultiCameraCaptureSequentially/MultiCameraCaptureSequentially.cpp b/source/Camera/Advanced/MultiCamera/MultiCameraCaptureSequentially/MultiCameraCaptureSequentially.cpp index 0375c8c3..7a00c50f 100644 --- a/source/Camera/Advanced/MultiCamera/MultiCameraCaptureSequentially/MultiCameraCaptureSequentially.cpp +++ b/source/Camera/Advanced/MultiCamera/MultiCameraCaptureSequentially/MultiCameraCaptureSequentially.cpp @@ -1,5 +1,8 @@ /* Capture point clouds with multiple cameras sequentially. + +For more information about simultaneously operating multiple cameras, check out this tutorial: +https://support.zivid.com/en/latest/camera/academy/camera/multiple-zivid-cameras.html */ #include diff --git a/source/Camera/Advanced/MultiCamera/MultiCameraCaptureSequentiallyWithInterleavedProcessing/MultiCameraCaptureSequentiallyWithInterleavedProcessing.cpp b/source/Camera/Advanced/MultiCamera/MultiCameraCaptureSequentiallyWithInterleavedProcessing/MultiCameraCaptureSequentiallyWithInterleavedProcessing.cpp index 25ee19f2..31d2d1a0 100644 --- a/source/Camera/Advanced/MultiCamera/MultiCameraCaptureSequentiallyWithInterleavedProcessing/MultiCameraCaptureSequentiallyWithInterleavedProcessing.cpp +++ b/source/Camera/Advanced/MultiCamera/MultiCameraCaptureSequentiallyWithInterleavedProcessing/MultiCameraCaptureSequentiallyWithInterleavedProcessing.cpp @@ -1,5 +1,8 @@ /* Capture point clouds with multiple cameras sequentially with interleaved processing. + +For more information about simultaneously operating multiple cameras, check out this tutorial: +https://support.zivid.com/en/latest/camera/academy/camera/multiple-zivid-cameras.html */ #include diff --git a/source/Camera/Basic/Capture/Capture.cpp b/source/Camera/Basic/Capture/Capture.cpp index 293e7139..778fe135 100644 --- a/source/Camera/Basic/Capture/Capture.cpp +++ b/source/Camera/Basic/Capture/Capture.cpp @@ -1,5 +1,8 @@ /* Capture colored point cloud, save 2D image, save 3D ZDF, and export PLY, using the Zivid camera. + +For more information about capturing, check out this tutorial: +https://support.zivid.com/en/latest/camera/academy/camera/capture-tutorial.html */ #include diff --git a/source/Camera/Basic/CaptureFromFileCamera/CaptureFromFileCamera.cpp b/source/Camera/Basic/CaptureFromFileCamera/CaptureFromFileCamera.cpp index a1d721ad..cbd185cc 100644 --- a/source/Camera/Basic/CaptureFromFileCamera/CaptureFromFileCamera.cpp +++ b/source/Camera/Basic/CaptureFromFileCamera/CaptureFromFileCamera.cpp @@ -6,6 +6,9 @@ The file camera files are found in Zivid Sample Data with ZFC file extension. See the instructions in README.md to download the Zivid Sample Data. There are five available file cameras to choose from, one for each camera model. The default file camera used in this sample is the Zivid 2+ MR60 file camera. + +For more information about file cameras, check out this tutorial: +https://support.zivid.com/en/latest/camera/academy/camera/file-camera.html */ #include diff --git a/source/Camera/Basic/CaptureHDRCompleteSettings/CaptureHDRCompleteSettings.cpp b/source/Camera/Basic/CaptureHDRCompleteSettings/CaptureHDRCompleteSettings.cpp index 61478271..80da98fc 100644 --- a/source/Camera/Basic/CaptureHDRCompleteSettings/CaptureHDRCompleteSettings.cpp +++ b/source/Camera/Basic/CaptureHDRCompleteSettings/CaptureHDRCompleteSettings.cpp @@ -9,6 +9,9 @@ this example is to demonstrate how to configure all the settings. This sample also demonstrates how to save and load settings from file. Note: This example uses experimental SDK features, which may be modified, moved, or deleted in the future without notice. + +For more information about camera settings, check out this article: +https://support.zivid.com/en/latest/camera/reference-articles/camera-settings.html */ #include diff --git a/source/Camera/Basic/CaptureWithSettingsFromYML/CaptureWithSettingsFromYML.cpp b/source/Camera/Basic/CaptureWithSettingsFromYML/CaptureWithSettingsFromYML.cpp index 24c897f6..0011d600 100644 --- a/source/Camera/Basic/CaptureWithSettingsFromYML/CaptureWithSettingsFromYML.cpp +++ b/source/Camera/Basic/CaptureWithSettingsFromYML/CaptureWithSettingsFromYML.cpp @@ -4,6 +4,9 @@ Capture images and point clouds, with and without color, from the Zivid camera w Choose whether to get the image in the linear RGB or the sRGB color space. The YML files for this sample can be found under the main Zivid sample instructions. + +For more information about camera settings, check out this article: +https://support.zivid.com/en/latest/camera/reference-articles/camera-settings.html */ #include diff --git a/source/Camera/Basic/README.md b/source/Camera/Basic/README.md new file mode 100644 index 00000000..c878502c --- /dev/null +++ b/source/Camera/Basic/README.md @@ -0,0 +1,3 @@ +# Camera + +> **Tutorials:** Read the [Capture Tutorial](https://support.zivid.com/en/latest/camera/academy/camera/capture-tutorial.html) or [Quick Capture Tutorial](https://support.zivid.com/en/latest/camera/getting-started/quick-capture-tutorial.html) on Zivid Knowledge Base. diff --git a/source/Camera/InfoUtilOther/CaptureWithDiagnostics/CaptureWithDiagnostics.cpp b/source/Camera/InfoUtilOther/CaptureWithDiagnostics/CaptureWithDiagnostics.cpp index 3da490e5..c496dc10 100644 --- a/source/Camera/InfoUtilOther/CaptureWithDiagnostics/CaptureWithDiagnostics.cpp +++ b/source/Camera/InfoUtilOther/CaptureWithDiagnostics/CaptureWithDiagnostics.cpp @@ -6,6 +6,9 @@ Send ZDF files with diagnostics enabled to the Zivid support team to allow more Have in mind that enabling diagnostics increases the capture time and the RAM usage. The YML file for this sample can be found under the main instructions for Zivid samples. + +For more information on diagnostics, check out this article: +https://support.zivid.com/en/latest/reference-articles/settings/diagnostics.html */ #include diff --git a/source/Camera/InfoUtilOther/ExploreSettingsMetaData/ExploreSettingsMetaData.cpp b/source/Camera/InfoUtilOther/ExploreSettingsMetaData/ExploreSettingsMetaData.cpp index 33f78815..f3d351e5 100644 --- a/source/Camera/InfoUtilOther/ExploreSettingsMetaData/ExploreSettingsMetaData.cpp +++ b/source/Camera/InfoUtilOther/ExploreSettingsMetaData/ExploreSettingsMetaData.cpp @@ -7,6 +7,9 @@ For every parameter, it prints: - the current value if explicitly set, - otherwise the camera’s default value, - and any available metadata (valid ranges or discrete allowed values) + +For more information on camera settings, check out this article: +https://support.zivid.com/en/latest/camera/reference-articles/camera-settings.html */ #include diff --git a/source/Camera/InfoUtilOther/FirmwareUpdater/FirmwareUpdater.cpp b/source/Camera/InfoUtilOther/FirmwareUpdater/FirmwareUpdater.cpp index 45d71632..cdcea268 100644 --- a/source/Camera/InfoUtilOther/FirmwareUpdater/FirmwareUpdater.cpp +++ b/source/Camera/InfoUtilOther/FirmwareUpdater/FirmwareUpdater.cpp @@ -1,5 +1,8 @@ /* Update firmware on the Zivid camera. + +For more information on firmware update, check out this tutorial: +https://support.zivid.com/en/latest/camera/academy/camera/firmware-update.html */ #include diff --git a/source/Camera/InfoUtilOther/GetCameraIntrinsics/GetCameraIntrinsics.cpp b/source/Camera/InfoUtilOther/GetCameraIntrinsics/GetCameraIntrinsics.cpp index 3ab12629..c0d42850 100644 --- a/source/Camera/InfoUtilOther/GetCameraIntrinsics/GetCameraIntrinsics.cpp +++ b/source/Camera/InfoUtilOther/GetCameraIntrinsics/GetCameraIntrinsics.cpp @@ -2,6 +2,9 @@ Read intrinsic parameters from the Zivid camera (OpenCV model) or estimate them from the point cloud. Note: This example uses experimental SDK features, which may be modified, moved, or deleted in the future without notice. + +For more information on camera intrinsics, check out this article: +https://support.zivid.com/en/latest/camera/reference-articles/camera-intrinsics.html */ #include diff --git a/source/Camera/InfoUtilOther/MeasureSceneConditions/MeasureSceneConditions.cpp b/source/Camera/InfoUtilOther/MeasureSceneConditions/MeasureSceneConditions.cpp index b3c37936..c870817e 100644 --- a/source/Camera/InfoUtilOther/MeasureSceneConditions/MeasureSceneConditions.cpp +++ b/source/Camera/InfoUtilOther/MeasureSceneConditions/MeasureSceneConditions.cpp @@ -1,5 +1,8 @@ /* Measure ambient light conditions in the scene and output the measured flickering frequency of the ambient light if flickering is detected. + +For more information on measuring scene conditions, check out this article: +https://support.zivid.com/en/latest/reference-articles/settings/2d-settings/2d-acquisition-settings/exposure-time.html#measuring-ambient-light-flicker-frequency */ #include diff --git a/source/Camera/InfoUtilOther/Network/AutomaticNetworkConfigurationForCameras/AutomaticNetworkConfigurationForCameras.cpp b/source/Camera/InfoUtilOther/Network/AutomaticNetworkConfigurationForCameras/AutomaticNetworkConfigurationForCameras.cpp index 7860deea..47528cc8 100644 --- a/source/Camera/InfoUtilOther/Network/AutomaticNetworkConfigurationForCameras/AutomaticNetworkConfigurationForCameras.cpp +++ b/source/Camera/InfoUtilOther/Network/AutomaticNetworkConfigurationForCameras/AutomaticNetworkConfigurationForCameras.cpp @@ -1,11 +1,14 @@ /* - * Automatically configure the IP addresses of connected cameras to match the network of the user's PC. - * - * Usage: - * - By default, the program applies the new configuration directly to the cameras. - * - Use the [--display-only] argument to simulate the configuration and display the - * proposed IP addresses without making actual changes. - */ +Automatically configure the IP addresses of connected cameras to match the network of the user's PC. + +Usage: +- By default, the program applies the new configuration directly to the cameras. +- Use the [--display-only] argument to simulate the configuration and display the + proposed IP addresses without making actual changes. + +For more information on network configuration, check out this tutorial: +https://support.zivid.com/en/latest/camera/getting-started/software-installation/zivid-two-network-configuration.html +*/ #include #include diff --git a/source/Camera/InfoUtilOther/Network/NetworkConfiguration/NetworkConfiguration.cpp b/source/Camera/InfoUtilOther/Network/NetworkConfiguration/NetworkConfiguration.cpp index 886b4405..24f5d6bb 100644 --- a/source/Camera/InfoUtilOther/Network/NetworkConfiguration/NetworkConfiguration.cpp +++ b/source/Camera/InfoUtilOther/Network/NetworkConfiguration/NetworkConfiguration.cpp @@ -1,6 +1,8 @@ /* Uses Zivid API to change the IP address of the Zivid camera. +For more information on network configuration, check out this tutorial: +https://support.zivid.com/en/latest/camera/getting-started/software-installation/zivid-two-network-configuration.html */ #include diff --git a/source/Camera/InfoUtilOther/SettingsInfo/SettingsInfo.cpp b/source/Camera/InfoUtilOther/SettingsInfo/SettingsInfo.cpp index cdbb43c2..8ea93328 100644 --- a/source/Camera/InfoUtilOther/SettingsInfo/SettingsInfo.cpp +++ b/source/Camera/InfoUtilOther/SettingsInfo/SettingsInfo.cpp @@ -2,6 +2,9 @@ Read settings info from the Zivid camera. Note: This example uses experimental SDK features, which may be modified, moved, or deleted in the future without notice. + +For more information about camera settings, check out this article: +https://support.zivid.com/en/latest/camera/reference-articles/camera-settings.html */ #include diff --git a/source/Camera/InfoUtilOther/Warmup/Warmup.cpp b/source/Camera/InfoUtilOther/Warmup/Warmup.cpp index 08b30e85..4ae25a6d 100644 --- a/source/Camera/InfoUtilOther/Warmup/Warmup.cpp +++ b/source/Camera/InfoUtilOther/Warmup/Warmup.cpp @@ -1,5 +1,8 @@ /* Short example of a basic way to warm up the camera with specified time and capture cycle. + +For more information on warming up the camera, check out this tutorial: +https://support.zivid.com/en/latest/camera/academy/camera/warmup.html */ #include diff --git a/source/Camera/InfoUtilOther/ZividBenchmark/ZividBenchmark.cpp b/source/Camera/InfoUtilOther/ZividBenchmark/ZividBenchmark.cpp index c30f06e0..caf0b389 100644 --- a/source/Camera/InfoUtilOther/ZividBenchmark/ZividBenchmark.cpp +++ b/source/Camera/InfoUtilOther/ZividBenchmark/ZividBenchmark.cpp @@ -3,6 +3,9 @@ Zividbenchmark is a sample that will test the average speed of different operati It will provide the mean and median for connects, disconnects, single imaging, HDR and filtering. Note: This example uses experimental SDK features, which may be modified, moved, or deleted in the future without notice. + +For more information about capture speed, check out this article: +https://support.zivid.com/en/latest/camera/reference-articles/calculate-3d-capture-speed.html */ #include diff --git a/source/Camera/Maintenance/CorrectCameraInField/CorrectCameraInField.cpp b/source/Camera/Maintenance/CorrectCameraInField/CorrectCameraInField.cpp index aab43abe..af3fe13b 100644 --- a/source/Camera/Maintenance/CorrectCameraInField/CorrectCameraInField.cpp +++ b/source/Camera/Maintenance/CorrectCameraInField/CorrectCameraInField.cpp @@ -10,6 +10,9 @@ connected to a different PC. After saving a correction, it will automatically be time that camera captures a new point cloud. Note: This example uses experimental SDK features, which may be modified, moved, or deleted in the future without notice. + +For more information about in-field correction, check out this tutorial: +https://support.zivid.com/en/latest/camera/academy/camera/infield-correction.html */ #include diff --git a/source/Camera/Maintenance/README.md b/source/Camera/Maintenance/README.md new file mode 100644 index 00000000..20780aec --- /dev/null +++ b/source/Camera/Maintenance/README.md @@ -0,0 +1,3 @@ +# Infield Correction + +> **Tutorial:** Read the full [Infield Correction](https://support.zivid.com/en/latest/camera/academy/camera/infield-correction.html) tutorial on Zivid Knowledge Base. diff --git a/source/Camera/Maintenance/ResetCameraInField/ResetCameraInField.cpp b/source/Camera/Maintenance/ResetCameraInField/ResetCameraInField.cpp index 7fb4038e..663c4359 100644 --- a/source/Camera/Maintenance/ResetCameraInField/ResetCameraInField.cpp +++ b/source/Camera/Maintenance/ResetCameraInField/ResetCameraInField.cpp @@ -2,6 +2,9 @@ Reset infield correction on a camera. Note: This example uses experimental SDK features, which may be modified, moved, or deleted in the future without notice. + +For more information about in-field correction, check out this tutorial: +https://support.zivid.com/en/latest/camera/academy/camera/infield-correction.html */ #include diff --git a/source/Camera/Maintenance/VerifyCameraInField/VerifyCameraInField.cpp b/source/Camera/Maintenance/VerifyCameraInField/VerifyCameraInField.cpp index 2b35c9e3..e7bcd7da 100644 --- a/source/Camera/Maintenance/VerifyCameraInField/VerifyCameraInField.cpp +++ b/source/Camera/Maintenance/VerifyCameraInField/VerifyCameraInField.cpp @@ -6,6 +6,9 @@ If the trueness is much worse than expected, the camera may have been damaged by shock in shipping or handling. If so, look at the CorrectCameraInField sample. Note: This example uses experimental SDK features, which may be modified, moved, or deleted in the future without notice. + +For more information about in-field verification, check out this tutorial: +https://support.zivid.com/en/latest/camera/academy/camera/infield-correction.html */ #include diff --git a/source/Camera/Maintenance/VerifyCameraInFieldFromZDF/VerifyCameraInFieldFromZDF.cpp b/source/Camera/Maintenance/VerifyCameraInFieldFromZDF/VerifyCameraInFieldFromZDF.cpp index 81b3966d..364e8e7f 100644 --- a/source/Camera/Maintenance/VerifyCameraInFieldFromZDF/VerifyCameraInFieldFromZDF.cpp +++ b/source/Camera/Maintenance/VerifyCameraInFieldFromZDF/VerifyCameraInFieldFromZDF.cpp @@ -15,6 +15,9 @@ back to their main tasks, you can load the ZDF files and verify the accuracy off used in production. In addition, you can send these ZDF files to Zivid Customer Success for investigation. Note: This example uses experimental SDK features, which may be modified, moved, or deleted in the future without notice. + +For more information about in-field verification, check out this tutorial: +https://support.zivid.com/en/latest/camera/academy/camera/infield-correction.html */ #include diff --git a/source/Camera/README.md b/source/Camera/README.md new file mode 100644 index 00000000..6dd7c1e4 --- /dev/null +++ b/source/Camera/README.md @@ -0,0 +1,3 @@ +# Camera + +> **Tutorials:** Read the [Camera](https://support.zivid.com/en/latest/camera/academy/camera.html) tutorials on Zivid Knowledge Base.