Continuous and Unified Vision–Tactile Sensing for Dexterous Manipulation (Real-World Setup)
This folder is one component of the main FingerEye monorepo.
- FingerEye Policy:
../FingerEyePolicy/ - FingerEye Real-World (current):
./ - FingerEye Lab:
../FingerEyeLab/
This repository contains the real-world system for FingerEye, including:
- Sensor setup
- Teleoperation and data collection
- Dataset conversion and visualization
- Policy deployment on hardware
- Delicate grasp execution
Scope of this repository
- Sensor setup and device configuration
- Demonstration data collection
- Dataset format conversion (pickle → zarr)
- Real-world policy inference and execution
Policy architecture and training are provided in the FingerEye Policy repository.
Before collecting data, you must properly configure all cameras.
Unplug all cameras.
Plug in one camera at a time, then run:
python recorder_utils/get_cam_port.pyThis script prints the USB port address of the connected device. Record this information for configuration.
Repeat for each camera.
For new stereo cameras:
- Modify the
dev_addrfield in:
recorder_utils/get_cam_order.py
- Run:
python recorder_utils/get_cam_order.pyAn image window showing stereo images will appear.
You can:
- Cover lenses with your finger
- Observe which side changes
- Identify left/right ordering
Then change them in the configs/base_settings.yml.
Ensure camera indices and left–right ordering are correct before proceeding.
Please refer to RobotCamCalib for camera calibration.
In another terminal:
python teleop_server.py --config-name {task_name}Example:
python teleop_server.py --config-name coin_standingpython main.py --config-name {task_name} mode=recordExample:
python main.py --config-name coin_standing mode=recordYou can now control the robot and collect demonstrations.
Recorded files will be saved as .pkl in logs.
After data collection, convert the pickle logs to a zarr dataset for training.
python pickle2zarr.py \
-I {path_to_your_pickle_dir} \
-o {path_to_your_zarr}Example:
python pickle2zarr.py \
-i /home/ps/ConTacRW/logs \
-o /home/ps/ConTacRW/data/60_real_0127.zarrThe resulting .zarr dataset can then be used in the FingerEye Policy repository for training.
You can visualize both raw pickle logs and converted zarr datasets.
python data_vis.py \
--mode zarr \
--path {path_to_your_zarr}Example:
python data_vis.py \
--mode zarr \
--path /home/ps/ConTacRW/data/60_real_0127.zarrpython visualize.py \
--mode pickle \
--path {path_to_your_pickle}Example:
python visualize.py \
--mode pickle \
--path /home/ps/ConTacRW/logs/recording_20260127_160722.pklVisualization helps verify:
- Camera synchronization
- Action correctness
- Data integrity
After training in the FingerEye Policy repository, deploy the trained checkpoint to the real robot.
python main.py \
--config-name {task_name} \
mode=policy \
eval_ckpt_path={ckpt_path}The system will:
- Load the trained policy
- Start real-time inference
- Execute control commands on hardware
Make sure:
- Sensor setup is correct
- Device addresses match configuration
- Robot is in a safe initial pose
python delicate_grasp.py task={task_name}