Skip to content

Repository files navigation

Vixel

CILicense: 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.
  • Overlapping named camera selections with full-resolution PNG capture and manifests.
  • One continuous PTP clock domain with scheduled-action capture for each selection.
  • Explicit degraded/strict membership policies and capture disk safeguards.
  • Loopback-only web dashboard, API, snapshots, and cached image streams.

Compatibility

Camera typeStatusNotes
GigE Vision + GenICamSupportedPrimary path; tested with LUCID and IDS cameras.
USB3 Vision + GenICamExperimentalAravis transport is enabled; Vixel USB enrollment is not yet complete.
Vendor GenTL onlyNot automaticRequires a dedicated provider or compatible transport integration.
Legacy/proprietary USBUnsupported by generic backendFor 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
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