# ViSP four-point image-based visual servo tutorial

Official C++ IBVS example using four projected point features, the current interaction matrix and vpServo to compute camera-frame velocities for a simulated free-flying camera. It runs a fixed 150-iteration numerical loop; image tracking, arm IK and successful robot execution were not verified.

ID: `visp-ibvs-four-points`

Record version: `source-1d0d3f32617c912e4eafdeb6506b6fc003b5c22c62405a828cda19d418ff767b`

Hub commit: `578f502ed4c408e0a4777e504a5cad7b2cc29209`

## Access

Read the pinned selected source, complete GPL terms and complete upstream build setup before integration. Source retrieval neither builds nor executes the tutorial.

Optional inert file retrieval: `python /PATH_TO_SKILL/scripts/rsh.py fetch-source visp-ibvs-four-points --expected-source-revision 372e03076373e012f2bec765b026bc1e4e7487bd --expected-source-sha256 1d0d3f32617c912e4eafdeb6506b6fc003b5c22c62405a828cda19d418ff767b --project ./experiment --json`. This verifies one file, preserves provenance and never installs or runs it. See [source-file retrieval](https://hub.superfastrobotics.com/source-files.md).

Hub preparation adapter: **false**. Runtime verification: **not_run**.

Upstream setup: https://github.com/lagadic/visp/blob/372e03076373e012f2bec765b026bc1e4e7487bd/tutorial/visual-servo/ibvs/CMakeLists.txt

## Source and license

- Repository: https://github.com/lagadic/visp
- Pinned source: https://github.com/lagadic/visp/blob/372e03076373e012f2bec765b026bc1e4e7487bd/tutorial/visual-servo/ibvs/tutorial-ibvs-4pts.cpp
- Revision: `372e03076373e012f2bec765b026bc1e4e7487bd`
- Path: `tutorial/visual-servo/ibvs/tutorial-ibvs-4pts.cpp`
- Source SHA256: `1d0d3f32617c912e4eafdeb6506b6fc003b5c22c62405a828cda19d418ff767b`
- Source bytes: 1798
- Original authors: ViSP project contributors
- License: [GPL-2.0-or-later](https://github.com/lagadic/visp/blob/372e03076373e012f2bec765b026bc1e4e7487bd/LICENSE.txt)
- License scope: Selected tutorial distributed in the pinned ViSP project under its root GPL version 2-or-later declaration, corroborated by README and root CMake. The selected file has no individual copyright, author or license header; attribution is project-level only. The complete tree has no additional LICENSE/COPYING/NOTICE/COPYRIGHT file in its ancestor directories. Preserve applicable GPL source, attribution, license and modification obligations. No ViSP Professional Edition grant, dependency/binary clearance or relicensing is asserted.

## Artifact

```json
{
  "kind": "code",
  "format": "cpp"
}
```

## Requirements

```json
{
  "python": null,
  "packages": [
    "Complete compatible ViSP C++ headers and libraries, including core, robot, visual_features and vs",
    "C++ toolchain and CMake >= 3.10",
    "Supplied tutorial CMake requests visp_core, visp_robot, visp_vs, visp_blob, visp_vision, visp_io, visp_gui and visp_ar"
  ],
  "hardware": [],
  "system": [
    "Configured upstream ViSP build and its target/dependency CMake helpers"
  ],
  "notes": "The selected main uses only analytic point projection and vpSimulatorCamera; it has no physical camera acquisition, blob tracking, display, model-file or robot-driver calls. The supplied directory CMake builds additional tutorials and copies their data, so that broader build has additional requirements beyond this one source. Root CMake declares ViSP 3.7.1 and enables BUILD_TUTORIALS; these are source declarations, not tested version/OS/architecture combinations. No package, compiler, simulator or robot was run. Dependency implementations and their transitive behavior were not exhaustively reviewed."
}
```

## Invocation

```json
{
  "entrypoint": "C++ main; upstream target tutorial-ibvs-4pts",
  "notes": "Build in a separately configured complete upstream ViSP project using its tutorial CMake; this inert file is not a standalone dependency bundle. The code configures EYEINHAND_CAMERA, CURRENT interaction matrix and gain 0.5, projects four square-corner points, then calls computeControlLaw and applies CAMERA_FRAME velocity to vpSimulatorCamera at a declared 0.040-second sampling period for 150 iterations. It catches vpException and prints it without an explicit failure return, and contains no final-error threshold or success assertion. This controls a numerical camera model, not an arm IK solver or physical robot. The Hub supplies no preparation/execution adapter and has not tested convergence."
}
```

## Compatibility

```json
[]
```

Missing environment fields remain unknown. Source discovery labels do not establish robot compatibility.

## Evidence

Level: **source_reviewed**. Runtime verification: **not_run**.

Complete selected C++ source, GPL license, README, tutorial CMake and IBVS documentation read as inert text; root build/license and official-mainpage declarations inspected. Seven immutable file byte counts, SHA-256 and Git blob IDs match the nontruncated 4800-entry tree. Eleven bounded anonymous primary GET attempts: ten HTTP 200 and one official-site TLS verification failure, with no retries, redirects, proxy or authentication. No installation, compilation, simulator/robot execution, task success or measured compatibility.

Source review and contributor reports do not establish task completion. Preserve upstream attribution and licenses.
