Skip to content

Repository files navigation

Vixel

CI License: MIT

Vixel is a modular ROS 2 platform for discovering, configuring, organizing, and previewing GenICam cameras. It uses Aravis for GigE Vision and USB3 Vision access, keeps camera identity separate from physical placement, and provides a dynamic browser dashboard through an SSH tunnel.

Warning

Vixel is experimental. Network provisioning changes host interfaces and sends control commands to cameras. Review every configuration and dry-run before applying it to field hardware.

Features

  • Dynamic camera discovery with stable sensor identities.
  • Automatic enrollment on explicitly approved camera networks.
  • Direct-camera and switched-network port modes.
  • Runtime-only GigE ForceIP assignments that preserve camera persistent settings.
  • Standard and arbitrary typed GenICam feature configuration.
  • ROS image, compressed preview, camera-info, inventory, and control interfaces.
  • Editable location, pose, calibration, notes, and per-camera settings.
  • Preview and persistent grouped capture with full-resolution PNGs and manifests.
  • Coordinated software-triggered group publication with measured host dispatch span.
  • Explicit degraded/strict membership policies and capture disk safeguards.
  • Loopback-only web dashboard, API, snapshots, and cached image streams.

Compatibility

Camera type Status Notes
GigE Vision + GenICam Supported Primary path; tested with LUCID and IDS cameras.
USB3 Vision + GenICam Experimental Aravis transport is enabled; Vixel USB enrollment is not yet complete.
Vendor GenTL only Not automatic Requires a dedicated provider or compatible transport integration.
Legacy/proprietary USB Unsupported by generic backend For example, IDS UI- cameras require IDS software.

Compatibility depends on standards compliance, supported pixel formats, and the GenICam nodes exposed by the camera. A manufacturer or model does not need a hard-coded Vixel entry when its GigE Vision or USB3 Vision implementation works with Aravis.

Architecture

flowchart LR
    Cameras[GenICam cameras] --> Provider[GenICam provider]
    Provider -->|observations and health| Manager[Inventory manager]
    Manager -->|assignments and groups| Provider
    Provider -->|ROS images and previews| Gateway[Web gateway]
    Provider -->|lossless capture chunks| Recorder[Capture recorder]
    Recorder -->|PNG sets and manifests| Storage[(Capture storage)]
    Recorder -->|capture history| Gateway
    Manager -->|inventory and operations| Gateway
    Network[Network setup helper] -->|approved host interfaces| Cameras
    Gateway -->|127.0.0.1:8080| Browser[Browser through SSH]
Loading

The image providers and capture recorder are C++. Inventory and web components are Python control-plane nodes. Public ROS interfaces live in vixel_interfaces; new hardware families integrate through the provider contract.

Quick start

Vixel targets ROS 2 Lyrical on Ubuntu 26.04.

sudo apt update
sudo apt install -y linuxptp
git clone https://github.com/sn3rt/vixel.git
cd vixel
rosdep install --from-paths . --ignore-src -r -y --rosdistro lyrical \
  --skip-keys "ament_pytest gjs"
source /opt/ros/lyrical/setup.bash
colcon build --symlink-install
source install/setup.bash

When using zsh, source /opt/ros/lyrical/setup.zsh and install/setup.zsh instead of the Bash setup files. Re-source both setup files after every build. An already-open terminal keeps the old Python paths; after a symlink-install rebuild that can leave ROS able to find an executable whose Python package metadata is no longer on its path.

Create a machine configuration before launching:

sudo install -d -m 0755 /etc/vixel
sudo install -m 0644 \
  install/vixel/share/vixel/config/machine.example.yaml \
  /etc/vixel/machine.yaml
sudoedit /etc/vixel/machine.yaml

ros2 run vixel_network vixel-network-setup -- \
  --machine-file /etc/vixel/machine.yaml apply --dry-run

After checking the dry-run, perform the one-time host service installation and launch Vixel:

sudo env "PYTHONPATH=$PYTHONPATH" \
  "$(ros2 pkg prefix vixel_network)/lib/vixel_network/vixel-network-setup" \
  --machine-file /etc/vixel/machine.yaml install-service
ros2 launch vixel cameras_launch.py web_preview:=true

The installation command creates, enables, and immediately starts the managed network and PTP services. Systemd starts them automatically on later boots.

From another computer, open an SSH tunnel and browse to http://127.0.0.1:8080:

ssh -N -L 8080:127.0.0.1:8080 user@camera-host

The dashboard and HTTP API have no built-in authentication. Keep the gateway on loopback and use SSH or an authenticated reverse proxy.

Documentation

License

Vixel is released under the MIT License. Third-party components keep their own licenses; see NOTICE.

About

Modular ROS 2 platform for discovering, configuring, synchronizing, and previewing GenICam cameras.

Resources

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages