Skip to content

SDK Examples

Luke edited this page Jun 29, 2026 · 1 revision

Example Demos

This directory contains example code for using SimpleSensorSync, with a total of 5 demos:


1. CustomCam - Custom Camera

Path: CustomCam/

Demonstrates how to implement a custom sensor by inheriting the Sensor class.

Core Files:

  • cus_cam.h/cus_cam.cpp - Custom camera class, inheriting from Sensor
  • main.cpp - Demonstrates how to configure the synchronizer and receive data

Usage:

// 1. Create synchronizer
Synchronizer synchronizer;
synchronizer.SetNetLink("192.168.1.188", 8888);

// 2. Configure custom sensor
auto mv_cam = std::make_shared<CustomCam>();
mv_cam->SetParams({{"cam_1", CAM_1}, {"cam_2", CAM_2}});
synchronizer.UseSensor(mv_cam);

// 3. Start synchronization
synchronizer.Start();

// 4. Subscribe to data
Messenger::GetInstance().SubStruct("imu_1", ImuCallback);
Messenger::GetInstance().SubStruct("cam_1", ImageCallback);

// 5. Stop
synchronizer.Stop();

2. VideoCam - Video Camera

Path: VideoCam/

Uses OpenCV to read USB video devices, supporting simultaneous multi-camera acquisition.

Core Files:

  • video_cam.h/video_cam.cpp - Inherits Sensor, uses cv::VideoCapture to read cameras
  • main.cpp - Basic example
  • main_ros.cpp - ROS version
  • main_ros2.cpp - ROS2 version

Features:

  • Each camera has its own independent reading thread
  • Thread-safe data access

3. VideoCam_LVI - LVI Video Camera

Path: VideoCam_LVI/

LVI device-specific version of VideoCam, with the same interface as VideoCam.


4. NetCam - Ethernet Industrial Camera

Path: NetCam/

Supports Ethernet industrial cameras (e.g., Hikvision, etc.), including ROS and ROS2 examples.

Core Files:

  • mv_cam.h/mv_cam.cpp - Ethernet camera implementation
  • main.cpp - Basic example
  • main_ros.cpp - ROS version
  • main_ros2.cpp - ROS2 version

5. NetCam_LVI - LVI Ethernet Camera

Path: NetCam_LVI/

LVI device-specific version of NetCam.


Build Instructions

cd example
mkdir build && cd build
cmake ..
make

Data Callback Example

void ImuCallback(const void* msg, size_t) {
    const auto* imu_data = static_cast<const ImuData*>(msg);
    // Process IMU data
}

void ImageCallback(const void* msg, size_t) {
    const auto* cam_data = static_cast<const CamData*>(msg);
    // Process image data
}

Standard Way to Inherit the Sensor Class

class MyCam final : public Sensor {
 public:
  ~MyCam() override;

  bool Initialization() override;  // Initialize camera
  void Stop() override;            // Stop acquisition
  void Start() override;           // Start acquisition

 private:
  void Receive(void* handle, const std::string&) override;  // Data reception
};

📝 中文页面 (Chinese Page)

Clone this wiki locally