Skip to content
Flying Animal

Convert Point Cloud From LiDAR Mobile To Speckle

🕒 Published at:

Tổng quan

Hai năm trước đây khi mình bắt đầu chia sẻ xử lý Point Cloud với LiDAR cho di động trên IPad hoặc Iphone, mình nhận ra rằng có rất nhiều điểm thú vị với nó và mang đến cho bạn một cái nhìn mới mẻ về Point Cloud. Tuy nhiên chưa bao giờ có thời gian để chia sẻ điều thú vị này. Và ngày đó cũng không có ai quan tâm nhiều về bài nghiên cứu này nên mình cũng cho lui dần lãng quên vào quá khứ. Đến ngày hôm nay thì mình đã đủ thời gian để chia sẻ với bạn về bài nghiên cứu này đồng thời thêm một số thông tin thú vị khác. Khi ai đó nhắc đến Scan-to-BIM thì bạn nên đọc bài viết này để hiểu về cách mà đằng sau bức tường đó hoạt động.

Bài viết này sẽ giới thiệu một số điều thú vị mà mình đã làm với LiDAR Ipad và cách chuyển đổi để đưa lên nền tảng Speckle.

Do mình cũng không có nhiều thời gian để đi scan bên ngoài nên quyết định sử dụng chính căn phòng đang ở ở Singapore để Scan luôn, và giá của căn phòng này cũng không hề rẻ tí nào nên thôi quét lại làm kỉ niệm, xem như là số hóa nó để sau này còn xem lại và vận hành cho căn phòng thuê đầu tiên của mình ở nước bạn.Và cũng biết đâu có thể dùng hữu ích cho việc gì đó sau này.

My Room
My Room

Giới thiệu LiDAR

Lidar, là viết tắt của thuật ngữ phát hiện và phạm vi ánh sáng (Light Detection and Ranging), là một phương pháp viễn thám sử dụng ánh sáng dưới dạng laser xung để đo phạm vi (khoảng cách thay đổi) với bề mặt. Các xung ánh sáng này kết hợp với các dữ liệu khác được ghi lại bởi hệ thống tạo ra thông tin ba chiều chính xác về hình dạng của đối tượng và các đặc điểm vật liệu, biến dạng bề mặt của nó.

Hệ thống LiDAR trên di động được Apple tích hợp vào các dòng Iphone, Ipad thế hệ mới. Điều này làm cho cộng việc quét 3D trở nên dễ dàng tiếp cận hơn bao giờ hết so với các thiết bị quét 3D đắt tiền như hiện nay.

Để nhận diện được chính xác và chất lượng tốt hơn, một số thiết bị đi kèm với nó điển hình như dòng sản phẩm đến từ structure.io cải thiện khả năng cảm nhận độ sâu của đối tượng vật thể về mọi mặt: Nhiều khung hình trên giây hơn ở độ phân giải cao hơn, cải thiện độ chính xác và độ chính xác cũng như màn trập để xử lý các đối tượng và cảnh chuyển động nhanh.

Định dạng cho Point Cloud rất phổ biến với một số phần mềm như Recap, Meshlab, Revit, CyClone, .... Bên dưới đây để mô tả chi tiết hơn thì falconviz cũng có một số hình ảnh cụ thể để bao quát rõ hơn về các định dạng phổ biến trong các phần mềm.

Sử dụng LiDAR

Hiện nay đã có rất nhiều ứng dụng cải thiện độ chính xác cao, cho phép xuất khẩu nhiều định dạng khác nhau. So với những năm trước đây thì các ứng dụng dã dần trở nên phong phú hơn rất nhiều, bạn có thể sử dụng từ khóa LiDAR để tìm kiếm hoặc sử dụng một số App mình khuyến nghị dưới đây :

3d-scanner-app

sitescape-lidar-3d-scanner

polycam-lidar-3d-scanner

sakura3d-scan

scandy-pro

canvas.io

Ở bài viết này mình sẽ sử dụng 3d-scanner-app để hướng dẫn cũng như xuất khẩu các tệp.

Việc quét LiDAR rất đơn giản, việc của bạn chỉ cần giơ Camera xung quanh đối tượng muốn quét như quay một video. Di chuyển chậm giúp bạn quét tốt hơn ở các góc nhọn nên lưu ý.

Việc xem trước màu sắc để cân nhắc nên quét lại hay không giúp bạn không mất quá nhiều thời gian cho các công đoạn ghép nối điểm dữ liệu sau này.

Điểm lưu ý cuối cùng là bạn hãy xuất khẩu chúng sang định dạng e57 để xử lý trên máy tính. Đây được xem là định dạng mình cảm thấy màu sắc được giữ lại hài hòa nhất và mình khuyến nghị bạn nên sử dụng định dạng này.

Như vậy là công đoạn trên di động/ Ipad đã xong, việc của bạn tiếp theo bây giờ là tập trung vào xử lý dữ liệu.

Xử lý dữ liệu quét từ LiDAR

Trong phần mềm Recap Pro Chọn khởi tạo dự án mới và bắt đầu nhập tệp dữ liệu es7,

Điều bạn có thể dễ dàng nhận ra ngay bây giờ chính là màu sắc của nó. Đó không phải là màu sắc gốc mà chúng ta mong muốn. Bên cạnh đó, việc quét từ di động rất dễ bị đảo chiều con quay hồi chuyển với hệ trục tọa độ trong không gian, điều này dẫn đến căn phòng quét của bạn đôi khi sẽ bị lộn ngược hoặc nghiêng không đúng với thực tế mong muốn. Màu sắc RGB là cực kì quan trọng, vì vậy chúng ta cần phải xử lý thêm vài bước trước khi quay trở lại làm việc với phần mềm này.

Việc bây giờ bạn cần làm là thêm một phần mềm trung gian mã nguồn mở nữa để xử lý, qua phần mềm này cũng giúp bạn cân chỉnh lại tọa độ mặt phẳng bị sai lệch và màu sắc, sau đó dọn dẹp và xuất ra định dạng để Recap xử lý lại một lần nữa. Point Cloud Compare chính là phần mềm tốt để làm điều này.

  1. Chuyển đổi các vùng xem của 6 mặt phẳng làm việc.
  2. Chọn lại tọa độ điểm mới cho Point Cloud.
  3. Thay đổi lại tọa độ và dịch chuyển góc quay tọa độ mới cho phù hợp.

Ngoài ra, sau khi xử lý tọa độ xong, hãy cân nhắc xử lý Noise (nhiễu) điểm dữ liệu. Điều này giúp bạn loại bỏ các điểm dữ liệu không cần thiết, giúp dữ liệu quét trở nên sạch sẽ hơn.

Sau khi xử lý với Point Cloud Compare, màu sắc RGB đã được trở lại. Đồng thời trục xoay ở vị trí góc nhìn từ trên xuống cũng đã cân chỉnh lại đúng hướng. Bây giờ bạn có thể tiếp tục làm việc với Recap Pro, định dạng được lưu ở định dạng e57 như xuất khẩu từ di động. Lưu ý rằng, định dạng .rcs.rcp là hai định dạng được ưu tiên chèn trong Revit nên bạn phải cố gắng xuất ra định dạng này. Recap Pro cho phép bạn xóa bỏ đi các vùng điểm dư không cần thiết cho nên nếu bạn cảm thấy các điểm trừ ở quá xa hoặc chúng không nằm trong phạm vi cần mô hình hóa, bạn nên xóa bỏ chúng để có chất lượng và kích thước Point Cloud tốt nhất.

So sánh màu sắc trước và sau khi cân chỉnh trở lại RGB. Với bước này thì việc cuối cùng của bạn chỉ là xuất tệp ra Rcp để gom tệp với rcs là troa đổi trung gian như một support. Dễ nhìn thấy, tệp bên trái màu sắc trông giống như những gì chúng ta đang mong đợi với màu sắc RGB, trong khi tệp bên phải màu sắc trông không đúng với màu sắc RGB từ di động đã xuất khẩu.

Với Revit, bạn có thể dễ dàng dưa tệp Point Cloud vào để xem trước và tiến hành mô hình hóa lại cho căn phòng của mình đã thuê, đó cũng là điểm cuối đầu ra mà chúng ta đang mong muốn.

So sánh trước khi chỉ sử dụng Recap và sau khi sử dụng Point Cloud Compare kết hợp với dọn dẹp đống tro tàn để đưa vào Revit.

Cuối cùng là bạn có thể xem xét chúng trên Speckle.

Việc xem xét này mình thấy Speckle đang đưa chưa hết dữ liệu Point Cloud lên đã đặt một vài câu hỏi nghi vấn trên diễn đàn, bạn có thể xem xét cập nhật tài bài viết này. Cũng may là gokermu cũng đã giúp mình xét vấn đề và hy vọng sẽ được sửa trong tương lai. Đây cũng là một phần mới với Speckle nên việc thiếu sót là điều đương nhiên. Kết quả là phát hiện ra điểm sai sót khi mô hình xoay đi một góc 90 với góc 180 sẽ cho ra các kết quả khác nhau.

Và công đoạn tiếp theo là mô hình hóa chúng rồi đưa lên lại speckle, việc mô hình hóa này đòi hỏi bạn am hiểu về Revit và sử dụng chuyên môn trong lĩnh vực kiến trúc để dựng lại mô hình này. Mình cũng không có thời gian trau chuốt nhiều nên việc đắp thông tin lên cho đủ dùng là được.Bạn có thể dễ dàng xem các đối tượng ở dạng điểm ảnh, việc đặt một chiết ghế vào đúng vị trí là khá dễ dàng.

  1. Ghế
  2. Laptop và màn hình

Và đây là kết quả sau khi mà mình đã dọn dẹp và mô hình hóa lại.

Và cuối cùng nữa là ở lần Stream Commit tiếp theo, bạn có thể ẩn Point Cloud và chỉ giữ lại mô hình hóa để để quay lại Speckle. Mình cũng sử dụng thêm Filters lại một chút cho dễ quan sát thành quả. Để xem toàn bộ Stream này, bạn có thể xem toàn bộ trên nhánh main tại đây.

Tổng kết lại để dễ dàng hình dung hơn, bạn đã tạo ra 3 commit lên Speckle, mỗi commit là một bước tiến nhảy vọt, giờ đây bạn đã sẵn sàng cho bước tiếp theo khai phá dữ liệu mô hình của mình.

Để lấy dữ liệu từ Speckle, bạn có thể sử dụng xác thực bởi token ngay lúc này, ở bên dưới mình sẽ ví dụ nhanh để giúp bạn xác thực qua token và đếm số lượng tường có trong commit cuối cùng:

py
from specklepy.transports.memory import MemoryTransport
from specklepy.api import operations
from specklepy.transports.server import ServerTransport
from specklepy.objects import Base
from specklepy.api.wrapper import StreamWrapper
import pandas as pd
stream_id = "ce16dcdd66"
commitid = "f3898b8a82"
branchName = "main"
token = "bfb80523abfe4d6f48fe845fb53cdc9b1c1c402ccf"
url = f"https://speckle.xyz/streams/{stream_id}/commits/{commitid}"
print("Url:",url)
wrapper = StreamWrapper(url)
client = client = SpeckleClient(host="speckle.xyz")
client.authenticate_with_token(token)
print("Auth State: ",client)
transport = ServerTransport(client=client, stream_id=stream_id)
commit = client.commit.get(stream_id, commitid)
res = operations.receive(commit.referencedObject, transport)
print("Total Walls:",len(res["@Walls"]))

Kết quả:

bash
Url: https://speckle.xyz/streams/ce16dcdd66/commits/f3898b8a82
Auth State:  SpeckleClient( server: https://speckle.xyz, authenticated: True )
Total Walls: 6

Để rõ hơn về phân tích và sử dụng dữ liệu phòng, tốt nhất bạn nên theo đuổi bài viết Use Speckle To Visualization Room Data. Đó là một bài viết liền mạnh gắn liền với bài viết này sau khi bạn đã có dữ liệu của một căn phòng thực tế thay vì những phòng đươc đưa lên từ mô hình Revit đơn giản.

Mở rộng

Gần đây, tác giả Dominik Ganghofer cũng đã xuất bản một ứng dụng ấn tượng, cho phép trực tiếp di chuyển PointCloud di động IOS sang Speckle, bạn có thể xem qua ứng dụng ar2speckle của anh ấy đang phát triển để tìm hiểu thêm.

Tổng kết

Như vậy là chỉ với chiếc Ipad hỗ trợ LiDAR nhỏ nhỏ mang bên mình, mình đã có thể làm vài điều hay ho rồi. Bạn cũng nên thử vài lần xem sao. Nếu bạn có bất kì cải tiến nào thì bạn có thể bình luận bên dưới bài viết này để trao đổi thêm.

Với việc chuyển đổi định dạng lên máy tính, việc mang PointCloud từ bất cứ phần mềm AEC như Revit, Rhino, ... lên Speckle dễ dàng như trở bàn tay, và bạn cũng có thể tạo ra một trình kết nối PointCloud độc lập không bị phụ thuộc vào bất kì phần mềm AEC nào với các thư viện mã nguồn mở sẵn có.

Việc đưa mô hình nhà mình lên Speckle từ việc mô hình hóa lại Point Cloud vẫn còn tiếp diễn ở các giai đoạn thú vị sau này. Hãy cùng chờ xem các phần tiếp theo.