PiLiDAR - Máy quét LiDAR Raspberry Pi
(github.com/PiLiDAR)- PiLiDAR là một dự án đang trong quá trình thực hiện nhằm kết hợp Raspberry Pi 4, LDRobot LiDAR, Raspberry Pi HQ Camera và động cơ bước để tạo ra máy quét panorama 3D 360° DIY
- Các chức năng cốt lõi gồm driver serial tùy chỉnh cho LD06·LD19·STL27L, tạo panorama cầu 360° 6K, và tạo cảnh 3D bằng cách ghép các mặt phẳng 2D theo góc và độ lệch
- Panorama được tạo bằng cách stitching ảnh mắt cá với Hugin, duy trì phơi sáng dựa trên EXIF và cân bằng trắng bằng tối ưu lặp color gain; cảnh 3D lấy mẫu vertex color từ panorama
- Kết quả có thể được trực quan hóa bằng Open3D và xuất ra PCD·PLY·e57; việc căn chỉnh nhiều cảnh dùng global registration và tinh chỉnh ICP, còn tạo bề mặt dùng Poisson Surface Meshing
- Chi phí linh kiện, không gồm bộ nguồn, vào khoảng 200~280 USD tính đến tháng 4/2025; Poisson Surface Meshing rất chậm trên Pi4 nên khuyến nghị chạy trên PC
PiLiDAR tạo ra gì
- PiLiDAR là dự án tự chế máy quét panorama 3D 360° dựa trên Raspberry Pi, hiện được đánh dấu là đang thực hiện
- Cấu hình được chia thành ba phần lớn
- LiDAR: driver serial tùy chỉnh cho LDRobot LD06, LD19, STL27L
- Panorama: tạo bản đồ cầu 360° 6K
- 3D Scene: dựng cảnh 3D bằng cách ghép các mặt phẳng 2D theo góc và độ lệch
Chức năng xử lý LiDAR
- Driver LiDAR bao gồm kiểm tra tính toàn vẹn gói bằng CRC
- PWM phần cứng của Raspberry Pi sử dụng rpi_hardware_pwm và được hiệu chỉnh bằng curve fitting
- Hỗ trợ trực quan hóa live 2D và xuất dữ liệu
- Định dạng xuất là numpy hoặc CSV
Tạo panorama và cảnh 3D
- Panorama cầu 360° 6K được tạo bằng cách stitching ảnh mắt cá với Hugin Panorama photo stitcher
- Phơi sáng camera được giữ ổn định bằng cách đọc dữ liệu EXIF của ảnh chụp tự động
- Cân bằng trắng được giữ nhất quán bằng cách tối ưu lặp color gain
- Cảnh 3D được dựng bằng cách ghép các mặt phẳng 2D dựa trên góc và độ lệch
- Lấy mẫu vertex color từ panorama
- Hỗ trợ trực quan hóa Open3D và xuất PCD, PLY, e57
- Việc căn chỉnh nhiều cảnh dùng global registration và tinh chỉnh ICP
- Poisson Surface Meshing rất chậm trên Pi4 nên khuyến nghị chạy trên PC
Kết quả sơ bộ và thời gian quét
- Kết quả sơ bộ dựa trên một lần quét đơn, chưa registration và chưa hậu xử lý
- Quét bên ngoài được cung cấp dưới dạng ví dụ colormapped intensity, quét bên trong là ví dụ vertex color
- Ví dụ thời gian quét như sau
- Khởi tạo: 12 giây
- Chụp 4 ảnh: 17 giây
- Quét 0.167° × 0.18°: 1 phút 24 giây
- Stitching và dọn dẹp: 37 giây
Cấu hình phần cứng và chi phí
- LiDAR dùng một trong ba loại
- LDRobot LD06: 80 USD
- LDRobot LD19: 70 USD
- LDRobot STL27L: 160 USD
- Camera và ống kính là tổ hợp Raspberry Pi HQ Camera và ArduCam M12 Lens, được ghi là 60 USD
- Raspberry Pi 4 được ghi là 50 USD, NEMA17 42-23 stepper và driver A4988 là 10 USD
- Nguồn cấp có hai cách
- v1: 2 pin 18650 và step-down converter
- v2: pin sạc dự phòng USB 10.000mAh và step-up converter
- Tổng chi phí, không gồm bộ nguồn, vào khoảng 200~280 USD tính đến tháng 4/2025
- Các link mua hàng chỉ là ví dụ, không nhất thiết là nơi mua được khuyến nghị
Động cơ, hộp số và in 3D
- Cụm truyền động dùng driver stepper lưỡng cực A4988 và stepper lưỡng cực NEMA17 42×42×23
- Stepper là 17HE08-1004S, mô-men xoắn được ghi là 17 Ncm
- Các linh kiện in 3D có file housing và linh kiện bổ sung trong PiLiDAR-Hardware Repo riêng
- Adapter ống kính và hộp số dùng mô hình bên ngoài
Thông số LiDAR và giao thức serial
- Thông số LD06
- Tần số lấy mẫu: 4500Hz
- baudrate: 230400
- Tần số quét: 5~13Hz
- Khoảng cách: 2cm~12m
- Ánh sáng môi trường: 30kLux
- Thông số STL27L
- Tần số lấy mẫu: 21600Hz
- baudrate: 921600
- Gói LD06 có tổng cộng 48 byte, cấu trúc big endian
- Ký tự bắt đầu: 1 byte, giá trị cố định
0x54 - Độ dài dữ liệu: 1 byte, hiện cố định ở 12 điểm đo
- Tốc độ: 2 byte, góc mỗi giây
- Góc bắt đầu và góc kết thúc: mỗi giá trị 2 byte, đơn vị 0,01 độ
- Dữ liệu: 36 byte, 12 điểm dữ liệu × 3 byte
- Mỗi điểm dữ liệu gồm 2 byte khoảng cách và 1 byte luminance
- Timestamp: 2 byte, đơn vị ms, đếm lại khi đạt 30000
- CRC check: 1 byte
- Ký tự bắt đầu: 1 byte, giá trị cố định
- Góc của từng điểm dữ liệu được tính bằng cách nội suy tuyến tính giữa góc bắt đầu và góc kết thúc
Kết nối và thiết lập Raspberry Pi
- Kết nối LD06 hoặc STL27L gồm UART Tx, PWM, GND, VCC 5V
- Kết nối GPIO Raspberry Pi dùng các chân sau
- 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
- Nút nguồn được nối cứng vào Pin 3 và bật
gpio-shutdown - Vì GPIO3 được dùng cho nút nguồn, gia tốc kế GY-521 MPU 6060 ánh xạ chân I2C tùy chỉnh bằng i2c-GPIO
- SDA: GPIO22
- SCL: GPIO27
- Nút quét được tự động khởi động bằng cách đăng ký script GPIO interrupt làm systemd service
- Quyền UART có thể cấp tạm thời cho
/dev/ttyS0, hoặc theo cách mới là dùng quy tắc udev để thiết lập nhómdialoutvàMODE="0660"
Phần mềm và thao tác từ xa
- PWM phần cứng Raspberry Pi được dùng bằng cách bật overlay
pwm-2chanvà cài RPi Hardware PWM library - Cần cài Hugin và plugin enblend để stitching panorama
- Điều khiển nguồn cổng USB dùng công cụ CLI uhubctl
- Jupyter chạy với tùy chọn
--ipvà--no-browserđể truy cập mạng từ xa - Với trực quan hóa Open3D từ xa, tài liệu nói nên dùng Plotly thay vì Open3D Web Visualizer
- Plotly có vẻ render phía client
- Open3D Web Visualizer được nói là render phía host và stream chuỗi JPG, gây tải cho CPU và Wi-Fi của Pi
Lưu dữ liệu quét và xử lý sự cố
- Có kèm quy trình clone và cài đặt usb_dump để dump dữ liệu quét ra bộ nhớ USB
- File cấu hình chỉ định
/home/pi/PiLiDAR/scanslàm thư mục nguồn - Các mục xử lý sự cố gồm
- CP210x Universal Windows Driver cho Windows
RPi.GPIO RuntimeError: Failed to add edge detectiondo giao diện sysfs GPIO bị gỡ bỏ trong Raspberry Pi OS Bookworm- Dùng rpi-lgpio làm phương án thay thế
- Tắt tăng tốc phần cứng khi VS Code chạy kém trên Raspberry Pi
- Do không có wheel pye57 cho Raspberry Pi arm64, cần cài
libxerces-c-devrồi build - Quy trình thêm thiết lập Wi-Fi bằng
wpa_supplicant.confqua SSH
Triển khai tham khảo và nguồn cảm hứng
- Cảm hứng liên quan đến LD06 đến từ LIDAR_LD06_python_loder và Lidar_LD06_for_Arduino
- Stitching camera 360 tham khảo fork hỗ trợ StereoPi của ShaunPrice và script 360-camera của BrianBock
- pyLIDAR được nhắc đến như một triển khai Python LiDAR khác
- Các triển khai liên quan đến ICP được đưa vào mục tham khảo gồm Doppler-ICP, KISS-ICP, Lidar-Visualizer
4 bình luận
Ý kiến trên Hacker News
Thật sự rất ngầu. Nếu là sản phẩm phần cứng, tôi khuyên nên ghi kèm liên kết và chi phí ước tính khi lập bảng kê linh kiện (BOM)
Giá sẽ thay đổi, nhưng nếu có một khoảng chi phí đại khái thì sẽ giúp ích rất nhiều cho người xem trên những nơi như HN để quyết định có tự làm thử hay không. Điều quan trọng không phải là con số chính xác mà là quy mô ước chừng
Những gì đã tìm hiểu rồi thì nên ghi lại. Dù không vì người khác thì cũng hữu ích cho chính bạn trong tương lai. Có nhiều linh kiện tên dễ gây nhầm lẫn, nên nếu có liên kết thì sẽ dễ xác nhận có đúng cùng một món hay không; trong lúc làm dự án thì bạn đã mua linh kiện rồi, nên có sẵn liên kết và giá gần như không tốn thêm thời gian
Chỉ vài ngày hay vài tuần trôi qua là chẳng ai còn nhớ, nên cần tài liệu hóa. Ghi lại 10 giây có thể tránh được việc mất 30 phút tìm lại sau này. Đây là một trong những bài học lớn nhất tôi học được khi mới bắt đầu làm kỹ sư, và phải đấu tranh với cái phần ngu ngốc trong đầu cứ thì thầm rằng “việc này chẳng tiết kiệm thời gian đâu”. Tài liệu hóa code cũng tương tự[0]
Các con số tôi tìm sơ khoảng 15 phút là như sau và có thể không chính xác. Lidar có thể là một trong các loại 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 và ống kính $60 https://amazon.com/Arducam-Raspberry-Camera-Distortion-Compatible/dp/…; Raspberry Pi 4 $50; động cơ bước NEMA17 42-23 $10 https://www.amazon.com/SIMAX3D-Nema17-Stepper-Motor/dp/B0CQLFNSMJ
Ngay cả chưa tính bộ nguồn và buck converter thì cũng vào khoảng $200~$280
[0] Khi tôi mới viết đoạn code đó, chỉ có tôi và Chúa biết chuyện gì đang diễn ra; nhưng thời gian trôi qua, giờ chỉ còn Chúa biết
Có thể phải nhân giá trong bảng kê linh kiện lên 2 hoặc 3 lần tùy nguồn và số chuyến giao hàng
Thật sự buồn khi từ chỗ có thể tiếp cận các tài liệu học tập rẻ và tốt để giới thiệu điện tử học cho trẻ em và người lớn, rồi chúng biến mất vì bị đánh thuế dưới danh nghĩa như nâng cao năng lực cạnh tranh của Mỹ. Đúng là một pha phản lưới nhà hoàn toàn
Xem từ điển cũng không thấy nghĩa nào gần với “giảm lượng của thứ gì đó”. [0]
Wikipedia cũng không đi sâu vào từ nguyên. [1]
[0] https://www.merriam-webster.com/dictionary/buck
[1] https://en.wikipedia.org/wiki/Buck_converter
Vậy thì tự làm đi
Với người có gia đình và cực kỳ thiếu thời gian, chỉ hoàn thành được dự án thôi đã quá sức rồi, khả năng cao là gần như không thể tài liệu hóa thêm. Nếu sau này phải làm lại thì có khi tôi sẽ không làm nữa. Không phải ai cũng sống trong tầng hầm nhà mẹ và có đầy thời gian rảnh
Máy quét thực tế ở đây: [1]
Khoảng cách tối đa 12m, và có vẻ từ mốc này trở đi mọi thứ bắt đầu đắt lên. Nguồn sáng, bộ lọc và cảm biến đều phải tốt hơn
Với hầu hết robot nhỏ thì vậy là đủ, và cũng có thể ổn cho mục đích phát hiện trẻ em và chó một cách đáng tin cậy quanh xe, như một cảm biến phụ trợ cho xe tự lái. Nhưng LIDAR tầm xa gắn phía trên thì vẫn còn khó
[1] https://www.ldrobot.com/
Suy đoán đầu tiên của tôi là từ khoảng cách này trở đi, an toàn laser trở thành một quy trình điều khiển chủ động. Gương của máy quét laser phải liên tục chuyển động để năng lượng có hại cho võng mạc người không bị tích lũy, nên cần một hệ thống điều khiển bắt buộc về an toàn, liên tục giám sát tốc độ và vị trí gương, và tắt laser nếu gương chậm lại quá mức. Tôi sai đến mức nào nhỉ?
Có nhiều thứ từng tốt hơn trong “những ngày xưa tươi đẹp”, nhưng thật đáng kinh ngạc khi được sống trong thời đại mà một cá nhân có tài có thể tự tay tạo ra công nghệ như thế này
Hơi liên quan một chút: tôi đang tìm một cách rẻ để đo khoảng cách với độ chính xác khoảng 10 micron ở khoảng cách cỡ 300mm. Có ý tưởng nào không?
my mechanics vừa đăng video thay thế cách đây vài ngày, thiết bị cũ có độ chính xác 5 micron
Giá thì tôi không rõ
Có vẻ một cặp thước cặp tốt cũng làm được. Tùy yêu cầu về độ chính xác, cũng có thể dùng cách tiếp cận tương tự: đặt một lưới cell điện dung trượt trên cell đo, vi điều khiển đọc các giá trị khi di chuyển rồi dùng Atan2() cho kết quả cuối cùng. Phần “thước đo” trong đó, khi tách riêng, được gọi là DRO (Digital ReadOut)
Nếu không bị giới hạn ngân sách thì cũng có các giải pháp bàn dịch chuyển vòng kín hoàn chỉnh:
https://www.pi-usa.us/en/
https://xeryon.com
Chúc may mắn, và hãy chuẩn bị tinh thần trước cú sốc giá
“Rẻ” theo tiêu chuẩn của bạn là khoảng bao nhiêu cũng rất quan trọng
Tôi đang nghĩ đến việc tự động hóa theo hướng này:
https://youtu.be/hnHjrz_inQU?si=dNzXVBVFsr7e8m_6
Laser và cảm biến camera bán sẵn, nếu tự mày mò, cũng có thể cho độ chính xác khá bất ngờ
Ví dụ Sketchfab thật tuyệt vời. Có thể đi quanh trong không gian 3D như một mô phỏng khoa học viễn tưởng
Tuy nhiên thao tác bằng chuột quá khó hiểu. Nó hiện biểu tượng “nắm kéo”, nhưng thực tế không có cảm giác đang nắm gì cả, và hướng di chuyển lại ngược nên cảm thấy hoàn toàn thiếu tự nhiên
Có lẽ cũng có thể tháo các linh kiện kiểu này từ robot hút bụi trên eBay hoặc Goodwill
Thật sự ấn tượng. Tôi chỉ lướt qua dự án nên có thể trong đó đã có rồi, nhưng tôi tò mò liệu có dữ liệu về độ chính xác không
Ví dụ độ chính xác ở khoảng cách 10m; nếu LIDAR này không hoạt động ở khoảng cách đó thì tôi cũng muốn biết ở khoảng cách ngắn hơn
Tôi quen với máy quét FARO, chúng dùng cơ chế khác và đủ chính xác để đo đạc công trình kiến trúc
Tôi cũng biết thị trường máy quét có nhiều nhánh, trong đó có những người cần độ chính xác và những người tạo nội dung cho các media kiểu game. Dự án này thật sự khó tin
Gần đây tôi đang thử chút photogrammetry để quét các phòng và không gian trong nhà. Đến giờ Metashape có vẻ phù hợp nhất, nhưng độ chính xác vẫn chưa tốt lắm, và tôi cũng đang cải thiện kỹ thuật chụp
Mục tiêu chính là biến nội thất các tòa nhà thật thành mô hình số để lưu giữ và phân tích. Tôi từng cân nhắc LIDAR một lúc nhưng gạt đi vì nghĩ quá khó và đắt, nhưng dự án này có vẻ đang làm lung lay giả định đó
Tôi tò mò phần mềm hậu xử lý trông như thế nào. Liệu có thể lấy point cloud rồi kết hợp với dữ liệu khác như ảnh DSLR để tạo texture không?
Nhìn vào hình thứ hai[1], một phần tường không được quét vì bị đèn treo che, và có lẽ LIDAR cũng không thấy phần trên ghế sofa. Có thể ghép hai hoặc nhiều point cloud để nhìn phía sau vật thể và các góc không? Phần mềm có thể tự căn chỉnh dựa trên các bức tường hoặc điểm chung để nhận ra đó là cùng một căn phòng ngoài đời, hay sẽ phải chỉnh tay khá nhiều? Với LIDAR có thứ gì tương đương coded target hoặc ARTag[0] không? Có mở rộng được sang nhiều phòng không?
Tôi muốn biết nó có đáng cân nhắc so với photogrammetry làm tốt hay không, hay chỉ tốn công hơn
Xin lỗi vì câu hỏi ở mức tôi còn không biết mình không biết gì
0: https://en.wikipedia.org/wiki/ARTag
1: https://github.com/PiLiDAR/PiLiDAR/raw/main/images/interior....
Cảm ơn đã chia sẻ công trình tuyệt vời này. Tôi tò mò về khả năng mở rộng và hiệu năng của PiLiDAR khi áp dụng cho các tập dữ liệu ngoài trời quy mô lớn
Nếu bạn đã benchmark trên các bộ dữ liệu như SemanticKITTI hoặc nuScenes, liệu bạn có thể cho biết thời gian chạy, mức dùng bộ nhớ, và nó tổng quát hóa tốt đến đâu vượt ra ngoài các cảnh trong nhà được dùng trong bài báo không?
Các bộ dữ liệu như vậy thường được tạo bằng camera RGBA, rồi point cloud được sinh ra sau trong bước hậu xử lý
Vì vậy đây không phải mô hình xử lý, mà là một bản hack phần cứng để lấy dữ liệu độ sâu thực tế. Bạn có thể tải lên bất cứ thứ gì mình muốn
Đây chính là thứ tôi đã tìm vài tuần trước. Tôi đã để các linh kiện trong giỏ Amazon suốt mấy tuần để prototype một thứ đại khái tương tự, nhưng vẫn chưa chắc về việc chọn máy quét LIDAR thực tế
Khi quay lại sau kỳ nghỉ Easter, tôi sẽ xem cái này như điểm xuất phát
Cộng đồng đèn pin là gì vậy?
https://www.reddit.com/r/flashlight/
Đây là một cộng đồng nhỏ trên Reddit, có thể xem như tương đương với diễn đàn phụ về đèn pin trên DC Inside ở Hàn Quốc.
Cảm ơn bạn