Handheld RGB-D scanner for outdoor/indoor scenes — developed as part of my Bachelor’s thesis at the Chair of Robotics (Informatik XVII), Julius-Maximilians-Universität Würzburg.
The goal is a robust pipeline from ROS recording → synchronized pair export → colored point clouds & depth images → (optional) depth densification → Uni-Fusion-ready outputs.
Note: An IMU is built into the device but is not calibrated yet and is therefore not used in the default pipeline.
- Synchronized RGB + LiDAR pairs from ROS bags (nearest-time matching with configurable tolerance)
- RGB-D frames and colored point clouds
- Depth densification (optional)
- ICP (merge/register multiple scans)
- Output for Uni-Fusion-compatible output folder structure (RGB, Depth)
- LiDAR: Livox MID-70
- Camera: Raspberry Pi Global-Shutter MonoCam and IDS-2M12-C0420, 4 mm, 1/2
- Compute: Raspberry Pi running Ubuntu 24.04
- IMU: BNO085, currently uncalibrated (not used yet)
Link to Fusion360 model: https://a360.co/4mhiRDJ
Raspberry-Pi-based-LiDAR-Camera-Rig/
├── device/                                         # Ros2 Workspace on handheld device 
│   ├── src/                                        
│   │   ├── bno085                                  # IMU
│   │   ├── camera_ros                              # Raspberry Pi Camera
│   │   ├── FAST-Calib-ROS2                         # extrinsic calibration
│   │   ├── libcamera                               # driver for Pi camera
│   │   ├── livox_ros2_driver                       # driver Livox Mid-70
│   │   └── code_pkg                                # own written ROS-nodes 
│   │     
│   └── recording_scripts/                          # automatic setup and capturing of rosbags
│       ├── start.sh                                # start every needed topic
│       └── start_and_record.sh                     # start topics and start recording a rosbag after 30s
│        
│     
├── tools/                                          # Python scripts for post-processing      
│   ├── correct_dataset.py                          # change BGR images to RGB images
│   ├── densify_depth.py                            # bilinear interpolation to fill depth image
│   ├── fuse_scans.py                               # colored pcl via icp
│   ├── generate_Fusion_Output.py                   # generate Uni-Fusion Output 
│   └── show_ply.py                                 # show pointcloud.ply
│                                         
├── stl/                                            # stl-files
│   ├── Bachelor_Device_Global_Shutter v9.f3z       # Fusion file of device
│   ├── BatteryMountingBracket.stl                  
│   ├── Body+BatteryMountingBracket.stl             
│   ├── Body.stl                                    
│   └── Front.stl                                   
│     
├── thesis/                                         # Academic thesis material  
└── README.md

