PiLiDAR - Raspberry Pi LiDAR स्कैनर
(github.com/PiLiDAR)- PiLiDAR, Raspberry Pi 4, LDRobot LiDAR, Raspberry Pi HQ Camera और stepper motor को मिलाकर DIY 360° 3D panorama scanner बनाने का work-in-progress project है
- इसकी मुख्य सुविधाओं में LD06·LD19·STL27L के लिए custom serial driver, 6K 360° spherical panorama बनाना, और 2D planes को angle व offset के आधार पर assemble करके 3D scene बनाना शामिल है
- Panorama, fisheye photos को Hugin से stitch करके बनता है; EXIF-based exposure बनाए रखने और color gain की iterative optimization से white balance मिलाया जाता है; 3D scene panorama से vertex color sample करता है
- आउटपुट को Open3D से visualize किया जा सकता है और PCD·PLY·e57 में export किया जा सकता है; कई scenes को align करने के लिए global registration और ICP fine-tuning, तथा surface generation के लिए Poisson Surface Meshing का उपयोग होता है
- Parts की लागत power supply को छोड़कर अप्रैल 2025 तक करीब 200~280 डॉलर है, और Poisson Surface Meshing Pi4 पर बहुत धीमा है, इसलिए इसे PC पर चलाने की सलाह दी जाती है
PiLiDAR क्या बनाता है
- PiLiDAR, Raspberry Pi आधारित 360° 3D panorama scanner खुद बनाने का project है, और अभी work-in-progress के रूप में दिखाया गया है
- इसकी संरचना मुख्य रूप से तीन हिस्सों में बंटी है
- LiDAR: LDRobot LD06, LD19, STL27L के लिए custom serial driver
- Panorama: 6K 360° spherical map generation
- 3D Scene: 2D planes को angle और offset के अनुसार assemble करके 3D scene बनाना
LiDAR processing features
- LiDAR driver में CRC package integrity check शामिल है
- Raspberry Pi का hardware PWM rpi_hardware_pwm का उपयोग करता है और curve fitting से calibrate किया जाता है
- 2D live visualization और export को support करता है
- Export format numpy या CSV है
Panorama और 3D scene generation
- 6K 360° spherical panorama, fisheye photos को Hugin Panorama photo stitcher से stitch करके बनाया जाता है
- Camera exposure को auto-captured images के EXIF data पढ़कर स्थिर रखा जाता है
- White balance को color gain की repeated optimization से एकसमान मिलाया जाता है
- 3D scene, angle और offset के आधार पर 2D planes को assemble करके बनाया जाता है
- Panorama से vertex color sample किया जाता है
- Open3D visualization और PCD, PLY, e57 export को support करता है
- कई scenes को align करने के लिए global registration और ICP fine-tuning का उपयोग करता है
- Poisson Surface Meshing Pi4 पर बहुत धीमा है, इसलिए PC execution की सलाह दी जाती है
प्रारंभिक परिणाम और scan time
- प्रारंभिक परिणाम single scan के आधार पर हैं और registration व post-processing नहीं की गई है
- External scan को colormapped intensity के रूप में, और internal scan को vertex color example के रूप में दिया गया है
- Scan time के उदाहरण इस प्रकार हैं
- Initialization: 12 सेकंड
- 4 photos capture: 17 सेकंड
- 0.167° × 0.18° scanning: 1 मिनट 24 सेकंड
- Stitching और cleanup: 37 सेकंड
Hardware configuration और cost
- LiDAR में तीन में से किसी एक का उपयोग होता है
- LDRobot LD06: 80 डॉलर
- LDRobot LD19: 70 डॉलर
- LDRobot STL27L: 160 डॉलर
- Camera और lens, Raspberry Pi HQ Camera और ArduCam M12 Lens का combination है, जिसकी कीमत 60 डॉलर बताई गई है
- Raspberry Pi 4 50 डॉलर, और NEMA17 42-23 stepper व A4988 driver 10 डॉलर बताए गए हैं
- Power supply के दो तरीके हैं
- v1: 2 18650 batteries और step-down converter
- v2: 10,000mAh USB power bank और step-up converter
- कुल लागत power supply को छोड़कर अप्रैल 2025 तक करीब 200~280 डॉलर है
- Purchase links सिर्फ examples हैं, जरूरी नहीं कि वे recommended sellers हों
Motor, gearbox और 3D printing
- Drive unit में A4988 bipolar stepper driver और NEMA17 42×42×23 bipolar stepper का उपयोग होता है
- Stepper 17HE08-1004S है और torque 17 Ncm बताया गया है
- 3D printed parts के लिए housing और additional parts files अलग PiLiDAR-Hardware Repo में हैं
- Lens adapter और gearbox external models का उपयोग करते हैं
LiDAR specifications और serial protocol
- LD06 specifications
- Sampling frequency: 4500Hz
- baudrate: 230400
- Scan frequency: 5~13Hz
- Range: 2cm~12m
- Ambient light: 30kLux
- STL27L specifications
- Sampling frequency: 21600Hz
- baudrate: 921600
- LD06 packet कुल 48 bytes का है और big endian structure है
- Start character: 1 byte, fixed value
0x54 - Data length: 1 byte, अभी 12 measurement points पर fixed
- Speed: 2 bytes, angle per second
- Start angle और end angle: प्रत्येक 2 bytes, unit 0.01 degree
- Data: 36 bytes, 12 data points × 3 bytes
- हर data point distance 2 bytes और luminance 1 byte से बना है
- Timestamp: 2 bytes, ms unit में, 30000 पर पहुंचने पर फिर से count करता है
- CRC check: 1 byte
- Start character: 1 byte, fixed value
- हर data point का angle, start angle और end angle को linear interpolation करके calculate किया जाता है
Raspberry Pi connection और setup
- LD06 या STL27L connection में UART Tx, PWM, GND, VCC 5V शामिल हैं
- Raspberry Pi GPIO connection में ये उपयोग होते हैं
- LD06 UART0 Rx: GP15
- LD06 PWM0: GP18
- Power Button: GP03
- Scan Button: GP17
- A4988 direction: GP26
- A4988 step: GP19
- A4988 microstepping mode: GP5, GP6, GP13
- Power button को Pin 3 पर hardwired किया जाता है, और
gpio-shutdownenable किया जाता है - GY-521 MPU 6060 accelerometer के लिए, क्योंकि GPIO3 power button के लिए उपयोग होता है, i2c-GPIO से custom I2C pins map किए जाते हैं
- SDA: GPIO22
- SCL: GPIO27
- Scan button को GPIO interrupt script को systemd service के रूप में register करके auto-start किया जाता है
- UART permissions के लिए अस्थायी तौर पर
/dev/ttyS0को permission दी जाती है, या नए तरीके में udev rule का उपयोग करकेdialoutgroup औरMODE="0660"set किया जाता है
Software और remote work
- Raspberry Pi hardware PWM में
pwm-2chanoverlay enable करके RPi Hardware PWM library install कर उपयोग किया जाता है - Panorama stitching के लिए Hugin और enblend plugin install किए जाते हैं
- USB port power control के लिए uhubctl CLI tool का उपयोग होता है
- Jupyter को remote network access के लिए
--ipऔर--no-browseroptions के साथ चलाया जाता है - Remote Open3D visualization के लिए Open3D Web Visualizer के बजाय Plotly बेहतर बताया गया है
- Plotly client-side rendering जैसा दिखता है
- Open3D Web Visualizer host side पर render करता है और JPG sequence stream करता है, जिससे Pi के CPU और Wi-Fi पर load पड़ता है
Scan data storage और troubleshooting
- Scans को USB storage में dump करने के लिए usb_dump clone और install करने की प्रक्रिया शामिल है
- Config file में
/home/pi/PiLiDAR/scansको source directory के रूप में specify किया जाता है - Troubleshooting items में ये शामिल हैं
- Windows के लिए CP210x Universal Windows Driver
- Raspberry Pi OS Bookworm में sysfs GPIO interface हटने से होने वाला
RPi.GPIO RuntimeError: Failed to add edge detection - Alternative के रूप में rpi-lgpio का उपयोग
- Raspberry Pi पर VS Code performance खराब होने पर hardware acceleration disable करना
- Raspberry Pi arm64 पर pye57 wheel न होने के कारण
libxerces-c-devinstall करने के बाद build करना - SSH से Wi-Fi setup जोड़ने की
wpa_supplicant.confprocedure
Reference implementations और inspiration
- LD06 से जुड़ी inspiration LIDAR_LD06_python_loder और Lidar_LD06_for_Arduino से मिली
- 360 camera stitching के लिए ShaunPrice के StereoPi support fork और BrianBock के 360-camera scripts को reference किया गया
- अन्य Python LiDAR implementation के रूप में pyLIDAR का उल्लेख है
- ICP-related implementations के लिए Doppler-ICP, KISS-ICP, Lidar-Visualizer को references में रखा गया है
4 टिप्पणियां
Hacker News की राय
वाकई बहुत बढ़िया। अगर यह एक hardware product है, तो BOM (Bill of Materials) बनाते समय links और अनुमानित cost भी साथ में लिखना अच्छा रहेगा
कीमतें बदलती रहेंगी, लेकिन अगर एक मोटा cost range हो, तो HN जैसी जगहों पर देखकर लोग यह तय करने में आसानी महसूस करेंगे कि वे खुद इसे आज़माना चाहते हैं या नहीं। यहाँ सटीक संख्या से ज़्यादा कुल परिमाण मायने रखता है
जो चीज़ें आप पहले ही खोज चुके हैं, उन्हें लिखकर रखना अच्छा है। सिर्फ दूसरों के लिए नहीं, अपने future self के लिए भी यह काम आता है। कई parts के नाम भ्रमित करने वाले होते हैं, इसलिए link होने पर यह जाँचना आसान हो जाता है कि वही चीज़ है या नहीं, और project के दौरान आपने parts पहले ही खरीद लिए होते हैं, इसलिए links और prices संभालकर रखने में लगभग कोई अतिरिक्त समय नहीं लगता
कुछ दिन या कुछ हफ्ते बाद किसी को कुछ याद नहीं रहता, इसलिए documentation ज़रूरी है। अभी 10 सेकंड देकर लिख लेने से बाद में 30 मिनट दोबारा खोजने से बच सकते हैं। engineer के रूप में शुरुआत करते समय सीखी गई सबसे बड़ी बातों में से एक यही थी, और दिमाग के उस बेवकूफ हिस्से से लड़ना पड़ता है जो फुसफुसाता है, “इससे समय नहीं बचेगा।” code documentation पर भी यही बात लागू होती है[0]
मैंने लगभग 15 मिनट की खोज में जो दाम पाए, वे ये हैं और हो सकता है पूरी तरह सटीक न हों। Lidar के लिए LD06 $80 https://www.aliexpress.us/item/3256803352905216.html, LD19 $70 https://amazon.com/DTOF-D300-Distance-Obstacle-Education/dp/…, STL27L $160 https://www.dfrobot.com/product-2726.html में से एक, camera और lens $60 https://amazon.com/Arducam-Raspberry-Camera-Distortion-Compatible/dp/…, Raspberry Pi 4 $50, NEMA17 42-23 stepper $10 https://www.amazon.com/SIMAX3D-Nema17-Stepper-Motor/dp/B0CQLFNSMJ
power supply और buck converter को छोड़कर भी यह करीब $200~$280 पड़ता है
[0] जब मैंने यह code पहली बार लिखा था, तब सिर्फ मैं और भगवान जानते थे कि क्या हो रहा है, लेकिन अब समय बीतने के बाद सिर्फ भगवान जानते हैं
BOM की कीमतों पर source और shipment की संख्या के हिसाब से 2x या 3x तक गुणा करना पड़ सकता है
बच्चों और बड़ों को electronics से परिचित कराने के लिए सस्ते और अच्छे learning materials तक पहुँच होना बहुत अच्छी बात थी, और अब “अमेरिकी प्रतिस्पर्धात्मकता बढ़ाने” जैसे नाम पर tax लगाकर उसे खत्म किया जा रहा है, यह सच में बहुत निराशाजनक है। यह पूरी तरह self-goal है
dictionary देखने पर भी “किसी चीज़ की मात्रा कम करना” जैसा अर्थ साफ़ नहीं दिखता। [0]
Wikipedia भी इसकी व्युत्पत्ति पर विस्तार से बात नहीं करता। [1]
[0] https://www.merriam-webster.com/dictionary/buck
[1] https://en.wikipedia.org/wiki/Buck_converter
तो फिर खुद कर लो
जिन लोगों के परिवार हैं और जिनके पास समय बहुत कम है, उनके लिए सिर्फ project पूरा कर लेना ही बड़ी बात है, documentation तक पहुँचना लगभग असंभव हो सकता है। अगर बाद में फिर से करना पड़े, तो हो सकता है वे करना ही छोड़ दें। हर कोई माँ के basement में रहकर इतना extra time नहीं बिताता
असली scanner यहाँ है: [1]
अधिकतम दूरी 12m है, और लगता है कि यहीं से चीज़ें महंगी होने लगती हैं। light source, filters और sensor — तीनों को बेहतर होना पड़ता है
ज़्यादातर छोटे robots के लिए यह काफी है, और autonomous vehicles में auxiliary sensor की तरह, vehicle के आसपास बच्चों और कुत्तों को भरोसेमंद तरीके से detect करने के लिए भी ठीक हो सकता है। लेकिन ऊपर लगने वाला long-range LIDAR अब भी मुश्किल है
[1] https://www.ldrobot.com/
मेरा पहला अंदाज़ा यह है कि शायद इसी दूरी से laser safety active control process बन जाती है। laser scanner का mirror लगातार चलता रहना चाहिए ताकि किसी व्यक्ति की retina पर हानिकारक energy जमा न हो, इसलिए mirror की speed और position को लगातार monitor करना पड़ता है, और अगर वह बहुत धीमा हो जाए तो laser बंद करने वाला एक अनिवार्य safety control system चाहिए। मैं इसमें कितना गलत हूँ?
“पुराने अच्छे दिनों” में बहुत सी चीज़ें बेहतर थीं, लेकिन यह अपने आप में अद्भुत है कि हम ऐसे युग में जी रहे हैं जहाँ प्रतिभाशाली व्यक्ति इस तरह की तकनीक खुद बना सकते हैं
थोड़ा संबंधित सवाल: मैं लगभग 300mm की दूरी पर करीब 10 माइक्रॉन की accuracy के साथ दूरी सस्ते में मापने का तरीका ढूंढ रहा हूँ। कोई आइडिया?
my mechanics ने कुछ दिन पहले इसका replacement video डाला था, और पुराना उपकरण 5 माइक्रॉन accuracy का था
कीमत का अंदाज़ा नहीं है
अच्छे calipers की एक जोड़ी से भी काम चल सकता है। precision की ज़रूरत पर निर्भर करते हुए यही approach इस्तेमाल की जा सकती है। एक capacitive cell grid रखें जो measurement cell के ऊपर slide करे, फिर microcontroller चलते हुए values पढ़े, और आख़िरी result के लिए Atan2() इस्तेमाल करे। इसमें केवल meter वाला हिस्सा अलग से DRO(Digital ReadOut) कहलाता है
अगर budget की सीमा नहीं है, तो ready-made closed-loop stage solutions भी हैं:
https://www.pi-usa.us/en/
https://xeryon.com
शुभकामनाएँ, और price tag के झटके के लिए तैयार रहना
तुम्हारे हिसाब से “सस्ता” कितना है, यह भी मायने रखता है
मैं कुछ इस दिशा को automate करने के बारे में सोच रहा हूँ:
https://youtu.be/hnHjrz_inQU?si=dNzXVBVFsr7e8m_6
off-the-shelf laser और camera sensor के साथ भी DIY छेड़छाड़ करके काफ़ी अप्रत्याशित precision हासिल की जा सकती है
Sketchfab example शानदार है। इसमें sci-fi simulation की तरह 3D space के अंदर घूम सकते हैं
लेकिन mouse controls बहुत उलझाऊ हैं। ‘grab’ आइकन दिखता है, पर असल में पकड़ने जैसा महसूस नहीं होता, और movement direction उलटी है, इसलिए सब कुछ पूरी तरह unnatural लगता है
लगता है eBay या Goodwill के robot vacuum से भी ऐसे parts निकाले जा सकते हैं
यह सच में कमाल है। मैंने project को बस सरसरी तौर पर देखा है, तो शायद यह पहले से शामिल हो, लेकिन मैं जानना चाहता हूँ कि accuracy data है या नहीं
उदाहरण के लिए 10m दूरी पर accuracy कैसी है, या अगर यह LIDAR उस दूरी पर काम नहीं करता तो उससे कम दूरी पर ही सही
मैं FARO scanners से परिचित हूँ, लेकिन वे अलग तरह का mechanism इस्तेमाल करते हैं, और building measurement के लिए काफ़ी accurate होते हैं
अब समझ आया कि scanner market की कई अलग शाखाएँ हैं—कुछ लोगों को accuracy चाहिए, और कुछ लोग games जैसे media के लिए content बनाते हैं। यह project सच में यक़ीन से परे है
मैं हाल में indoor rooms और spaces को scan करने के लिए थोड़ा photogrammetry आज़मा रहा हूँ। अभी तक Metashape सबसे उपयुक्त लगा है, लेकिन precision अभी खास नहीं है, और मैं shooting technique भी सुधार रहा हूँ
मुख्य लक्ष्य असली building interiors को preservation और analysis के लिए digital models में बदलना है। मैंने LIDAR को थोड़ी देर के लिए सोचा था, लेकिन उसे बहुत मुश्किल और महंगा मानकर छोड़ दिया था; यह project उस धारणा को हिला देता है
post-processing software कैसा दिखता है, यह जानने की जिज्ञासा है। क्या point cloud लेकर उसे DSLR photos जैसी दूसरी data के साथ मिलाकर texturing की जा सकती है?
दूसरी image[1] में देखें तो लटके हुए lamp की वजह से दीवार का एक हिस्सा scan नहीं हुआ, और शायद LIDAR सोफ़े के ऊपर भी नहीं देख पाया। क्या objects और corners के पीछे देखने के लिए दो या उससे ज़्यादा point clouds को जोड़ा जा सकता है? क्या software common walls या points के आधार पर यह पहचानकर कि यह वही असली कमरा है, उन्हें automatically align कर सकता है, या फिर काफ़ी manual adjustment करनी पड़ती है? क्या LIDAR में coded target या ARTag[0] जैसा कुछ होता है? क्या इसे कई कमरों तक बढ़ाया जा सकता है?
मैं सोच रहा हूँ कि अच्छी तरह की गई photogrammetry की तुलना में यह विचार करने लायक है या बस मेहनत बढ़ाएगा
ऐसे सवाल पूछने के लिए माफ़ी—मैं उस स्तर पर हूँ जहाँ मुझे यह भी नहीं पता कि मुझे क्या नहीं पता
0: https://en.wikipedia.org/wiki/ARTag
1: https://github.com/PiLiDAR/PiLiDAR/raw/main/images/interior....
यह शानदार काम साझा करने के लिए धन्यवाद। मुझे जानना है कि PiLiDAR बड़े outdoor datasets पर लागू करने पर scalability और performance कैसी रहती है
अगर आपने SemanticKITTI या nuScenes जैसे datasets पर benchmark किया है, तो क्या आप runtime, memory usage, और paper में इस्तेमाल किए गए indoor scenes से आगे यह कितना अच्छी तरह generalize करता है, बता सकते हैं?
ऐसे datasets आमतौर पर RGBA camera से बनाए जाते हैं, और point clouds बाद में post-processing stage में generate होते हैं
इसलिए यह processing model नहीं, बल्कि असली depth data पाने के लिए hardware hack है। आप चाहें तो उस पर कुछ भी लगा सकते हैं
मैं कुछ हफ़्ते पहले यही ढूंढ रहा था। लगभग ऐसा ही कुछ prototype करने के लिए parts कई हफ़्तों से Amazon cart में पड़े हैं, लेकिन असली LIDAR scanner selection को लेकर भरोसा नहीं बन रहा था
Easter की छुट्टियों से लौटकर इसे starting point की तरह देखना पड़ेगा
टॉर्च कम्युनिटी क्या है?
https://www.reddit.com/r/flashlight/
भारत में इसके लगभग समकक्ष Reddit के भीतर एक छोटा समुदाय है, जिसे मोटे तौर पर DCInside की flashlight minor gallery जैसा कहा जा सकता है
धन्यवाद