TỔNG QUAN
Giới thiệu
Điều hướng cho robot di động theo quỹ đạo mong muốn đã được nghiên cứu từ lâu và đạt nhiều thành công lớn Phương pháp điều hướng cổ điển dựa vào cảm biến để tính toán khoảng cách, hướng và gia tốc nhằm xác định quỹ đạo di chuyển của robot Tuy nhiên, những sai số từ cảm biến vẫn tồn tại, khiến cho việc điều khiển robot chỉ dựa vào cảm biến không đủ để giải quyết vấn đề một cách triệt để Các nhà nghiên cứu đã nhận ra rằng cần phải phối hợp và tương tác với môi trường xung quanh để cung cấp thêm thông tin, giúp robot đưa ra quyết định chính xác hơn trong quá trình di chuyển đến đích.
Một giải pháp được nghiên cứu và phát triển là nhận dạng vật mốc thông qua xử lý hình ảnh từ camera Kinect Phương pháp này cho phép robot nhận diện các vật mốc nhân tạo hoặc tự nhiên, từ đó xác định tọa độ hiện tại và hỗ trợ quá trình điều hướng robot một cách hiệu quả hơn.
Hình 1.1: Robot di chuyển dựa vào cảm biến
Quá trình xử lý ảnh để nhận dạng vật mốc chỉ hiệu quả khi vật mốc nằm trong vùng quét của camera, dẫn đến việc điều hướng robot không đạt được độ chính xác cao Để cải thiện điều này, một giải pháp tiềm năng là cung cấp cho robot bản đồ 2D hoặc 3D, giúp robot kết hợp dữ liệu hiện tại với bản đồ đã có để xác định tọa độ và xây dựng quỹ đạo tốt hơn.
Trong thế giới thực, việc quan sát một đối tượng thường yêu cầu nhiều góc nhìn khác nhau, tương ứng với việc đặt Kinect ở các vị trí khác nhau để thu thập dữ liệu Tuy nhiên, dữ liệu từ Kinect thường rời rạc, chỉ ghi nhận thông tin ảnh màu RGB và ảnh độ sâu tại vị trí hiện tại Khi ánh xạ các điểm ảnh vào không gian 3D, các điểm từ nhiều frame có thể chồng chéo lên nhau, tạo ra thách thức trong việc chuyển đổi từng frame ảnh sang hệ tọa độ thế giới thực Để giải quyết vấn đề này, các frame ảnh 2D và đám mây điểm 3D cần được sắp xếp và ghép lại để tạo thành một bản đồ toàn cục của môi trường xung quanh Quá trình sắp xếp nhiều đám mây điểm 3D khác nhau vào một mô hình hoàn chỉnh được gọi là registration and alignment.
Hình 1.3: Các đám mây rời rạc trong không gian
Hình 1.4 [16] minh họa sáu đám mây điểm từ các góc nhìn khác nhau, mỗi đám mây chỉ đại diện cho một phần nhỏ của thế giới xung quanh Để kết hợp chúng thành một hình ảnh hoàn chỉnh như trong Hình 1.5 [16], cần áp dụng phương pháp tìm kiếm các điểm tương đồng trong dữ liệu đầu vào Quá trình này bao gồm việc ước tính các hàm biến đổi nhằm xoay và chuyển đổi từng bộ dữ liệu riêng lẻ vào một hệ tọa độ toàn cục.
Hình 1.4: Ví dụ về các góc nhìn khác nhau ở các vị trí khác nhau
Kết quả nghiên cứu trong và ngoài nước
Lập bản đồ có thể thực hiện qua nhiều phương pháp, trong đó có việc sử dụng thiết bị định vị toàn cầu GPS gắn trên ô tô Khi xe di chuyển, tọa độ hiện tại sẽ được cập nhật và gửi về máy chủ, cho phép máy chủ tính toán và vẽ bản đồ 2D của môi trường xung quanh Tuy nhiên, độ chính xác của GPS thường không cao, với sai số từ vài mét đến vài chục mét, nên phương pháp này chỉ phù hợp cho việc lập bản đồ ở quy mô lớn.
Hình 1.6: Dùng xe ô tô được trang bị thiết bị định vị GPS để lập bản đồ
Một phương pháp lập bản đồ khác sử dụng công nghệ RFID cho phép robot xác định vị trí và tạo bản đồ dựa trên khoảng cách đọc thẻ tag từ bộ Reader và góc phủ sóng của hai ăng ten Robot sẽ tính toán chiều dài và góc để hoàn thiện bản đồ Tuy nhiên, hạn chế của phương pháp này là khoảng cách đọc của bộ Reader không đủ lớn, dẫn đến khó khăn trong việc điều hướng robot, đồng thời yêu cầu phải gắn thẻ tag ở những vị trí có khoảng cách nhất định trong giới hạn của bộ Reader.
Hình 1.7 Dùng robot được trang bị đầu đọc RFID và các thẻ tag để lập bản đồ
Một ứng dụng khác của camera Kinect Xbox 360 là nhận dạng vật thể bằng OpenCV, tận dụng khả năng nhận biết độ sâu của camera Tuy nhiên, robot chỉ có thể nhận diện các vật mốc trong vùng nhìn của camera, do đó, các vật mốc nhân tạo cần được sắp xếp theo một trật tự nhất định, bao gồm màu sắc và khoảng cách giữa chúng Điều này dẫn đến việc xử lý thông tin bị giới hạn trong vùng nhìn của camera, tạo thành một nhược điểm trong nghiên cứu này.
Hình 1.8: Định vị robot di động sử dụng vật mốc nhân tạo
Trong nghiên cứu về Robot tự hành tránh vật cản, tác giả Nguyễn Hồng Đức và Nguyễn Văn Đức đã đề xuất một phương pháp điều hướng sử dụng camera Kinect và phần mềm PCL để xử lý hình ảnh Tuy nhiên, đề tài này chỉ tập trung vào việc tránh vật cản trong vùng nhìn của robot.
Hình 1.9: Robot tự hành tránh vật cản
In the realm of 3D technology, Radu Bogdan Rusu introduces the Point Cloud Library (PCL), highlighting its software features and capabilities Additionally, Andrew discusses robust methods for registering 2D and 3D point sets, focusing on the image point data collection process and the Iterative Closest Point (ICP) algorithm used for aligning these datasets.
Một nghiên cứu đã sử dụng camera Kinect kết hợp với phần mềm mã nguồn mở Point Cloud Library để quét 3D một vật thể trong không gian Nghiên cứu này chuyển đổi vật thể thành các điểm ảnh rời rạc trong không gian 3D, hay còn gọi là đám mây điểm ảnh, với gốc tọa độ tại camera Quá trình này bao gồm việc xoay vật thể và thu thập thêm đám mây điểm ảnh, sau đó ghép chúng lại dựa trên các điểm tương đồng để tạo thành một vật thể 3D hoàn chỉnh Tuy nhiên, nghiên cứu có giới hạn là vật thể cần được nhận dạng trong môi trường nền không đổi.
Hình 1.10: Scan 3D một đối tượng
Nghiên cứu "Implementing Kinect Sensor for Building 3D Maps of Indoor Environments" của tác giả Wael R Abdulmajeed và cộng sự đã thành công trong việc xây dựng bản đồ 3D cho môi trường trong nhà Kết quả cho thấy camera Kinect có nhiều ưu điểm, bao gồm kích thước bản đồ gần giống với kích thước thực tế và chi phí thấp hơn so với các phương pháp sử dụng cảm biến laser hay sonic.
Hình 1.11: Bản đồ 3D môi trường trong nhà
Mục tiêu của đề tài
Đề tài này giới thiệu phương pháp ghép các đám mây điểm ảnh trong không gian và chiếu chúng xuống mặt phẳng nền nhà để tạo ra đám mây 2D Để đạt được bản đồ 2D, robot sẽ được điều hướng theo quỹ đạo đã định sẵn Khoảng cách giới hạn sẽ được tính toán dựa trên tốc độ di chuyển và góc quay của robot, theo thông số góc mở của camera, nhằm ghi nhận các đám mây điểm ảnh tại từng vị trí mà robot đi qua.
Kết quả của nghiên cứu này nhằm cải thiện hiệu quả điều hướng cho robot di động bằng cách kết hợp phương pháp nhận dạng vật mốc tự nhiên Điều này không chỉ giúp robot thực hiện điều hướng tốt hơn trong các lần tiếp theo mà còn có thể hỗ trợ các robot khác trong cùng môi trường đã được điều hướng trước đó.
Nội dung thực hiện của đề tài
Luận văn này giới thiệu phương pháp ghép nhiều đám mây điểm ảnh, bao gồm tính toán giá trị giới hạn và kết quả thực nghiệm, đồng thời đánh giá kết quả để đề xuất hướng phát triển Chương 2 tập trung vào lý thuyết khởi tạo đám mây, các phương pháp lọc và giảm số lượng điểm ảnh, cũng như cách tìm và ghép đám mây điểm ảnh dựa trên cặp điểm tương đồng Chương 3 trình bày chi tiết thuật toán thực hiện dựa trên cơ sở lý thuyết đã nêu Nội dung thực hiện của đề tài được trình bày trong chương 4, trong khi chương 5 đề xuất hướng phát triển tiếp theo.
CƠ SỞ LÝ THUYẾT
Giới thiệu chung về Kinect Xbox 360 và Point Cloud Library
Camera Kinect là sản phẩm của Microsoft, được phát triển dựa trên công nghệ camera của PrimeSense Sản phẩm này đã chính thức được bán ra tại Bắc Mỹ vào ngày 4 tháng 11.
Sản phẩm Kinect Xbox 360, ra mắt vào năm 2010, được ứng dụng trong nghiên cứu xử lý ảnh 3D, nhận diện cử chỉ và theo dõi cơ thể Thiết bị cung cấp hình ảnh sâu với độ phân giải 640x480 pixel, mỗi điểm ảnh được gán một giá trị độ sâu từ 0-2048 (11bit) Để khai thác thông tin này, mối quan hệ giữa giá trị cảm biến và khoảng cách thực tế đã được thiết lập.
Camera RGB và IR trên Kinect được bố trí cách nhau 2.5 cm, dẫn đến sự khác biệt trong khung hình IR RGB camera có góc mở lớn hơn, đồng thời tiêu cự cũng nhỏ hơn Thông số kỹ thuật cơ bản của Kinect được nêu chi tiết trong Bảng 2.1 [13].
Bảng 2.1: Góc mở và tiêu cự của RGB và IR camera
Tính năng VGA IR camera
Thư viện Point Cloud Library (PCL) hỗ trợ xử lý n-D Point Cloud và hình ảnh 3D, với nhiều thuật toán như lọc, khôi phục bề mặt, phân vùng và ước lượng đặc tính vật PCL tương thích với nhiều nền tảng như Linux, MacOS, Windows và Android, và được chia thành các thư viện nhỏ để dễ dàng biên dịch Phiên bản mới nhất, PCL 1.6, được phát hành vào ngày 17 tháng 07 năm 2012, và hoàn toàn miễn phí cho nghiên cứu cũng như phát triển sản phẩm thương mại.
PCL là một hệ thống bao gồm nhiều module nhỏ, mỗi module thực hiện các chức năng riêng lẻ và được đóng gói lại trong PCL Các thư viện cơ bản của PCL bao gồm Eigen, Flann, Boost, VTK và CminPack, đóng vai trò quan trọng trong việc cung cấp các tính năng cần thiết cho người dùng.
- Eigen: một thư viện mở hỗ trợ cho các phép toán tuyến tính, được dùng trong hầu hết các tính toán toán học của PCL
- Flann: (Fast Library for Approximate Nearest Neighbors) hỗ trợ cho việc tìm kiếm nhanh các điểm lân cận trong không gian 3D
- Boost: giúp cho việc chia sẻ con trỏ trên tất cả các module và thuật toán trong
PCL để tránh việc sao chép trùng lặp dữ liệu đã được lấy về trong hệ thống
- VTK: (Visualization Toolkit) hỗ trợ cho nhiều platform trong việc thu về dữ liệu 3D, hỗ trợ việc hiển thị, ước lượng thể tích vật thể
- CMinPack: một thư viện mở giúp cho việc giải quyết các phép toán tuyến tính và không tuyến tính
Dữ liệu 3D của đám mây điểm ảnh được lưu trữ trong các tập tin có đuôi pcd, bao gồm hai phần chính: header và dữ liệu Cấu trúc của một tập tin pcd được minh họa trong hình 2.3.
Hình 2.3: Cấu trúc của một tập tin *.pcd
Các bước ghép đám mây
Quá trình ghép hai đám mây điểm ảnh bắt đầu khi xuất hiện đám mây điểm ảnh mới, trong đó đám mây cũ được coi là đám mây toàn cục Đám mây mới sẽ được sắp xếp và ghép vào đám mây toàn cục Quá trình này lặp lại khi có dữ liệu từ đám mây mới, giúp dữ liệu ban đầu trở thành dữ liệu toàn cục, tạo ra bản đồ 3D của môi trường mà robot di chuyển Các bước thực hiện ghép đám mây được trình bày trong Hình 2.4 [16], với giải thích cụ thể cho từng bước.
Bước đầu tiên là chọn một đám mây điểm ảnh làm gốc, trong đó hệ trục tọa độ của camera tương ứng với hệ trục tọa độ của môi trường thực tại thời điểm đó.
- Bước 2: thu thập đám mây điểm ảnh mới, thực hiện kiểm tra với tất cả các đám mây điểm ảnh cũ xem có nhiều điểm tương đồng nhất
- Bước 3: loại bỏ các cặp không có độ sâu, lọc bớt các cặp không chính xác so với các cặp khác
Bước 4: Xác định vị trí tương đối giữa hai đám mây điểm ảnh trong không gian và ước lượng hàm chuyển đổi nhằm tối thiểu hóa khoảng cách giữa các cặp điểm tương đồng.
- Bước 5: thực hiện xắp xếp, ghép đám mây mới vào đám mây cũ sử dụng hàm chuyển đổi vừa tìm ở bước 4
Phương pháp chỉ áp dụng roto-translation và tổng hợp các đám mây sẽ tạo ra một bản đồ chứa nhiều lỗi Để cải thiện kết quả này, một quy trình xử lý dữ liệu đám mây đã được đề xuất, bao gồm hai giai đoạn khác nhau Giai đoạn đầu tiên sử dụng phương pháp ICP (Iterative Closest Point), trong khi giai đoạn thứ hai kết hợp hai phương pháp ghi dữ liệu là SAC-IA (Sample Consensus Initial Alignment) và ICP Sau khi khởi tạo bản đồ, mỗi đám mây mới sẽ được ghi dữ liệu với bản đồ trước đó, và dữ liệu sẽ được xác nhận là tốt và đủ để đưa vào bản đồ, nếu không sẽ tiến hành lọc đám mây lại.
Hình 2.4 mô tả các bước thực hiện ghi một cặp dữ liệu đám mây điểm ảnh, bao gồm tổng trực tiếp và tổng sau khi xử lý ghi dữ liệu Hình 2.5 trình bày bản đồ kết quả của việc cộng các đám mây sau khi xử lý roto-translation (a) và sau khi xử lý ghi dữ liệu bằng phương pháp SAC-IA và ICP (b).
Hình 2.6: Lưu đồ xây dựng lại bản đồ
Ghi dữ liệu đám mây mới sử dụng phương pháp dời tọa độ
Mỗi lần ghi dữ liệu mới, một đám mây điểm mới được tạo ra bằng cách đọc đám mây điểm trước đó, tùy thuộc vào vị trí của camera trong quá trình thu thập Khi thông tin này được xử lý, bao gồm việc tính toán khoảng cách di chuyển và góc quay của robot, đám mây điểm mới có thể được chuyển đổi thành tham chiếu toàn cục.
2.3.1 Chuyển từ tham chiếu cục bộ thành tham chiếu toàn cục dùng ma trận biến đổi Để ghép nhiều đám mây khác lại với nhau tạo thành bản đồ chung, chúng phải ở trong cùng một tham chiếu Hình 2.7 [6] trình bày hai bước của quá trình chuyển đổi này Đám mây điểm thu được sẽ được tham chiếu với hệ tọa độ của camera Kinect
R Kinect là một hệ thống cảm biến với điểm gốc tại camera Kinect, nơi các trục x_k, y_k và z_k được xác định như minh họa trong Hình 2.8 Hệ thống tham chiếu này đóng vai trò quan trọng trong việc định vị và điều khiển robot.
Robot R hoạt động như một hệ tọa độ di động Do camera được gắn cố định trên robot và không điều khiển được góc ngẩng, quay của camera, tọa độ của R kinect và R robot sẽ trùng nhau trong cùng một hệ tham chiếu.
Hình 2.7: Quá trình chuyển đổi đám mây tham chiếu từ Kinect thành tham chiếu toàn cục
Để chuyển đổi một đám mây điểm từ hệ tọa độ của camera Kinect (R_kinect) sang hệ tọa độ của robot (R_robot), cần áp dụng phép biến đổi T_K_R Sau khi các đám mây được đưa vào một hệ tham chiếu cục bộ thích hợp, việc chuyển đổi sang hệ tham chiếu toàn cục (R_global) là cần thiết Hệ tọa độ toàn cục này có cùng gốc tọa độ và định hướng với R_robot, cho phép làm việc với các đám mây điểm khác.
Hàm biến đổi toàn cục
x y 0 , 0 , 0 0,0,0 Hình 2.9 [6] cho thấy mối quan hệ giữa ba hệ tọa độ khác nhau
Hệ tọa độ toàn cục và mối liên quan với hệ tọa độ của Kinect được thể hiện qua phép biến đổi T R G, cho phép chuyển đổi đám mây điểm từ hệ tọa độ robot R robot sang hệ tọa độ toàn cục R global Phép biến đổi T R G thực chất là một ma trận, như được mô tả trong phương trình (2.1) dưới đây.
Hệ tọa độ của camera và robot cần được định hướng sao cho trục x r tương ứng với trục z k, nhưng điều này không phải lúc nào cũng chính xác Kinect cho phép một mức độ tự do trong việc thay đổi định hướng của z k, với khả năng di chuyển bằng tay và điều chỉnh ở các vị trí khác nhau trong khoảng 6 độ Khi z k không song song với sàn nhà, việc căn chỉnh ban đầu trục x r là cần thiết Sự căn chỉnh này phụ thuộc vào góc quay đơn của ω k quanh x k, và hàm biến đổi được định nghĩa là T offset.
Phương pháp này yêu cầu thông số chính xác về chuyển động của robot trong hai trường hợp: chuyển động tịnh tiến và chuyển động xoay tròn Nếu thông số không chính xác, quá trình ghép hai đám mây điểm ảnh sẽ gặp phải vấn đề như trùng lặp hoặc mất điểm ảnh.
Ghi đám mây sử dụng ICP (Iterative Closest Points)
Quá trình ghi dữ liệu đầu tiên nhằm thay thế phương pháp đã nêu, như được mô tả trong Mục 2.3 và Hình 2.10 [6] Quá trình này thiết lập một liên kết duy nhất giữa bản đồ hiện tại và đám mây mới thông qua thuật toán Iterative Closest Points.
Hình 2.10: Lưu đồ ghi dữ liệu chỉ sử dụng ICP
Thuật toán ICP (Iterative Closest Point) là phương pháp hiệu quả để sắp xếp hai tập dữ liệu đám mây điểm, nhằm tối thiểu hóa khoảng cách Euclidean giữa các điểm tương đồng.
Sắp xếp dùng ICP Điểm Fitness Đám mây mới: đám mây ICP nguồn
Bản đồ trước sử dụng đám mây ICP để xác định sự tương đồng, với điều kiện khoảng cách giữa các điểm nhỏ hơn một ngưỡng nhất định Quá trình này sẽ ước lượng một hàm biến đổi cố định nhằm tối thiểu hóa khoảng cách giữa các điểm, và sẽ lặp lại cho đến khi sự khác biệt giữa các biến đổi liên tục nhỏ hơn giới hạn cho phép hoặc đạt đến số lần lặp tối đa.
Mô tả thuật toán ICP để ghi và sắp xếp một đám mây điểm D vào một đám mây
M gồm ba bước như sau [11]:
1 Chọn điểm tương đồng w i,j trong khoảng {0,1}
2 Tối thiểu hàm biến đổi xoay R và hàm tịnh tiến t
3 Lặp lại bước 1 và bước 2 cho đến khi đạt được hội tụ hoặc đạt đến giá trị lặp
Nếu hai đám mây M và D có kích thước giống nhau thì Phương trình (2.1) được viết lại như sau:
Tính trọng tâm của những điểm được tìm thấy
Lúc này, Phương trình (2.2) được viết lại như sau:
R, t R t R (2.5) Đặt ~ t t c m R c d , thay vào Phương trình (2.3) ta khai triển thành:
Theo K.S Arun và cộng sự T S Huang, S D Blostein trong Least square fitting of two 3-d point sets, IEEE Transactions on Pattern Analysis and Machine
Intelligence, 9(5):pg 698 – 700, 1987, chỉ ra rằng:
1 m ' d ' xx xy xz n T i i yx yy yz i zx zy zz
1 1 m ' d ' ; m ' d ' ; n n xx ix ix xy ix iy i i
2.4.1.1 Tìm hàm biến đổi giữa các điểm tương đồng
Tịnh tiến t của hàm biến đổi cố định là vector dùng để di chuyển tâm của các điểm được chọn trong M đến tâm của các điểm tương đồng trong D.
Trong thuật toán, n đại diện cho số lượng cặp kết hợp được xác định ở bước 1, trong đó i dùng để liệt kê các cặp điểm với (m i , d i) là cặp thứ i Cần lưu ý rằng một số điểm trong tập M có thể là lân cận gần nhất của một số điểm trong tập D, điều này có nghĩa là chúng sẽ đóng vai trò quan trọng hơn trong quá trình tính toán trọng tâm.
Nếu có ma trận H được định nghĩa như sau:
Sau đó, từ khai triển H U V T , ta được R = UV T (2.11)
2.4.1.2 Lựa chọn điểm và tìm kiếm vùng lân cận gần nhất
Mỗi điểm đám mây thường chứa hơn 300.000 điểm, do đó việc tìm kiếm lân cận gần nhất cho từng điểm trở nên không khả thi.
Thuật toán ICP cho thấy rằng không cần lấy mẫu tất cả các điểm, vì một nhóm nhỏ hơn được chọn ngẫu nhiên có thể đạt hiệu quả tương tự trong nhiều trường hợp với tốc độ hội tụ và sai số tương đương Do đó, quyết định sử dụng phương pháp lấy mẫu ngẫu nhiên trong quá trình thực hiện đã được đưa ra, với việc chọn điểm lân cận gần nhất thông qua các đám mây di chuyển, thực hiện các bước có kích thước ngẫu nhiên nhằm đạt được 4.000 điểm tương đồng trong mỗi lần lặp.
2.4.2 Ghép đám mây điểm chồng một phần sử dụng ICP
Hình 2.11 cho thấy hai đám mây điểm ảnh chỉ chồng lấp một phần Khi áp dụng thuật toán ICP để ghép hai đám mây này, bước đầu tiên sẽ tạo ra một tập lân cận Tất cả các điểm trong khu vực đánh dấu (hình chữ nhật) đều thuộc cùng một lân cận Nếu tất cả các lân cận được đưa vào bộ đếm trong quá trình tính toán, hàm biến đổi cố định có thể dẫn đến kết quả không chính xác.
Mặc dù ICP mang lại nhiều lợi ích, nhưng nó cũng gặp phải một số vấn đề, như việc hội tụ đến cực tiểu cục bộ, dẫn đến kết quả không phải lúc nào cũng đảm bảo chất lượng ghi dữ liệu Do đó, quá trình này có thể yêu cầu lặp lại nhiều lần để đạt được hiệu quả tốt nhất.
Hình 2.11: Hai đám mây điểm chồng lấp một phần
Chức năng ICP cung cấp một tham số gọi là điểm thích hợp, cho biết chất lượng của các liên kết đã thực hiện Điểm thích hợp này tương ứng với số phép tính về khoảng cách sai số giữa các đám mây liên kết sau quá trình ghi dữ liệu Tham số này rất hữu ích trong việc quyết định xem sự liên kết có đủ tốt để được bao gồm trong bản đồ hay không.
Ghi đám mây sử dụng SAC-IA
Quá trình ghi dữ liệu thứ hai nhằm cải thiện độ chính xác của liên kết Sau khi sử dụng thuật toán ICP để ghép hai đám mây, nếu kết quả không đạt yêu cầu, sẽ tiến hành một quá trình liên kết thứ hai Quá trình này áp dụng mẫu đồng thuận sắp xếp ban đầu SAC-IA (Sample Consensus Initial Alignment) để thu thập liên kết ban đầu, từ đó tạo ra dự đoán tốt hơn cho ICP Sau khi hoàn tất ICP thứ hai, kết quả sẽ được đánh giá để quyết định xem có nên ghép các đám mây mới vào bản đồ hay không Hình 2.12 [6] minh họa sơ đồ quá trình ghi đám mây.
Quyết định Đám mây mới: đám mây ICP nguồn
Bản đồ trước: đám mây ICP đích
Săp xếp ICP tiếp theo Điểm Fitness
Nếu Fitness ≤ giá trị chấp nhận nhỏ nhất
Nếu Fitness > giá trị chấp nhận nhỏ nhất
Tính năng đám mây trước: mục tiêu SACIA
Để nhận diện một sự liên kết SAC-IA, trước tiên cần tính toán các tính năng hình học cần thiết cho quá trình này Hình 2.13 minh họa các bước khác nhau để thu thập những tính năng cần thiết cho SAC-IA.
Hình 2.13 : Lưu đồ tìm tính năng cần thiết cho sắp xếp SAC-IA
Thời gian thực hiện tính toán và khả năng tự sắp xếp của SAC-IA làm tăng đáng kể kích thước của đám mây điểm G P i Việc liên kết SAC-IA giữa hai đám mây điểm có khoảng 50.000 điểm có thể mất từ 5 đến 7 phút, tùy thuộc vào các thông số, trong khi liên kết với đám mây điểm khoảng 3.000 điểm chỉ mất 5 giây Do đó, bước đầu tiên cần thực hiện là giảm kích thước của đám mây điểm trước khi tính toán các tính năng mong muốn Khi bản đồ phát triển, kích thước của nó cũng tăng theo, dẫn đến việc làm chậm quá trình liên kết.
Sự ước lượng bề mặt chuẩn
Một đám mây điểm mô tả bề mặt thông qua một tập hợp các mẫu điểm Để ước lượng tiêu chuẩn tại mọi điểm p và q trong P i, cần phân tích các vùng lân cận p k q Việc chọn lựa p k q chính xác là bước quan trọng để đạt được ước lượng tốt Có hai thủ tục để xác định p k q: thủ tục đầu tiên là tìm vùng lân cận gần nhất với k p q (k lần tìm kiếm), và thủ tục thứ hai là xác định bán kính r, trong đó bất kỳ điểm nào gần p q hơn r sẽ được đưa vào p k q.
Fast Point Features Histograms (FPFH)
SAC-IA sử dụng tính năng FPFH để thực hiện liên kết, dựa trên các ước lượng trước đó nhằm tính toán quan hệ hình học giữa một điểm p, q và các điểm lân cận p, k, q Tính năng FPFH tạo ra một không gian đa chiều, cho phép nhóm tất cả các điểm lấy mẫu từ cùng một bề mặt trong một lớp.
SAC-IA là thuật toán áp dụng FPFH để xác định mối liên kết đầu tiên giữa hai đám mây điểm P và Q Thuật toán này bao gồm ba bước chính để thực hiện quá trình nhận dạng.
Bước 1 : Chọn s điểm mẫu từ P sao cho khoảng cách cặp của chúng là lớn hơn khoảng cách tối thiểu d min
Bước 2 : Tìm các điểm trong Q có FPFH tương tự như của các điểm mẫu Điểm này sẽ được coi là tương đồng với điểm mẫu
Bước 3 : Tính hàm chuyển đổi giữa điểm mẫu và điểm tương đồng
Sau khi SAC-IA được thực hiện, kết quả việc chuyển đổi được sử dụng để chuyển đổi các đám mây muốn được liên kết vào bản đồ
Qua đó, một khởi tạo ban đầu cho vòng lặp thứ hai được thành lập và ICP được lặp lại như bước trên.
Quyết định lồng đám mây điểm
Trong bước cuối cùng, quá trình ghi đám mây điểm sẽ xác định việc lồng ghép đám mây vào bản đồ hay không Để thực hiện điều này, chúng tôi áp dụng tham số ICP, tỷ lệ thích hợp của quá trình ghi đám mây, như được trình bày trong Hình 2.14 [6] dưới đây.
Khi ghi đám mây điểm, sự chồng lấp giữa các đám mây là điều không thể tránh khỏi Tuy nhiên, nếu nhiều đám mây liên tiếp không được chấp nhận, điều này sẽ ảnh hưởng đến việc tái cấu trúc 3D, khiến các đám mây mới không thể được lồng ghép vào bản đồ.
Hình 2.14: Quy trình quyết định lồng một đám mây đã được ghi vào trong bản đồ
Xử lí cuối cùng
Khi một đám mây mới được thêm vào, tất cả các điểm của nó sẽ được tích hợp vào bản đồ đã có Điều này dẫn đến việc vùng chồng lấp trở nên dày đặc hơn, vì mỗi vị trí ước lượng sẽ chứa hai điểm khác nhau.
Bản đồ đã được tinh chỉnh bằng cách giảm số lượng mẫu sử dụng Voxel Grid một lần nữa, giúp lọc các thông số tương tự như trước khi các đám mây mới được bổ sung.
Chuẩn bị cho lần lặp tiếp theo
Khi một đám mây mới được lồng vào, nó trở thành mục tiêu tiếp theo trong quá trình ghi đám mây ICP, trong khi các đám mây không truy cập được thiết lập là 0 Nếu sử dụng SAC-IA, các tính năng cục bộ của đám mây lồng vào lần cuối sẽ được tính toán và thiết lập làm mục tiêu cho liên kết SAC-IA tiếp theo.
2.9 Kỹ thuật lọc đám mây để giảm số lượng điểm ảnh
Mỗi đám mây điểm ảnh từ máy ảnh Kinect chứa khoảng 300.000 điểm, nhưng việc xử lý chúng tốn nhiều thời gian và bộ nhớ mà không mang lại lợi ích đáng kể Do đó, việc lọc đám mây là cần thiết để tối ưu hóa nguồn lực và thời gian tính toán Quy trình lọc đám mây bao gồm bốn bước chính: lọc thông dải, giảm số lượng mẫu, loại bỏ các điểm ngoại lai (Outliers) và xây dựng lại bề mặt.
Hình 2.15 Các bước lọc một đám mây điểm ảnh
Bộ lọc đầu tiên được sử dụng để thiết lập giới hạn độ sâu trong các đám mây, với máy ảnh Kinect có phạm vi hoạt động tối đa là 3,5 mét Tuy nhiên, máy ảnh có khả năng thu điểm ở khoảng cách xa hơn ngưỡng này, và để xây dựng lại chính xác, cần sử dụng các điểm nằm xa hơn 3,5 mét, mặc dù độ chính xác về chiều sâu sẽ giảm khi khoảng cách giữa các điểm và camera tăng lên Do đó, bộ lọc thông dải sẽ loại bỏ bất kỳ điểm nào có độ sâu lớn hơn giới hạn này.
Do đó, khi qua bộ lọc thông dải, tất cả điểm ảnh có z k 0,6 , z k là trục tọa độ theo chiều sâu
2.9.2 Giảm số lượng mẫu (Down Sampling)
Việc giảm kích thước đám mây điểm trong lập bản đồ bằng Kinect là cần thiết, đặc biệt khi độ chính xác không phải là yếu tố quan trọng Down Sampling thông qua Voxel Grid cho phép giảm số lượng điểm bằng cách chia đám mây điểm thành các hộp (Voxels) với kích thước mong muốn Tất cả các điểm trong mỗi hộp được gộp lại thành một điểm duy nhất, tương ứng với trọng tâm của chúng, từ đó thiết lập khoảng cách tối thiểu giữa các điểm và giảm đáng kể thời gian tính toán cũng như bộ nhớ sử dụng.
Voxel hóa một đám mây 3D chia nhỏ đám mây thành các ô vuông có kích thước cố định Mỗi ô vuông được tạo ra sẽ thay thế tất cả các điểm ảnh bằng điểm tâm của ô vuông đó, như minh họa trong Hình 2.16.
Hình 2.16: Mô tả lọc dạng Voxel Grid
2.9.3 Loại bỏ Outliers Đám mây điểm thu từ Kinect có thể có sai số đo lường để tạo ra giá trị ngoại lai thưa thớt Điểm như vậy có thể dẫn đến sai sót trong khi ước tính các tính năng cục bộ của đám mây điểm như chuẩn hóa bề mặt Tính toán của loại hình này thường yêu cầu để điều tra một số lượng vùng lân cận của một điểm Hơn nữa, loại bỏ điểm như vậy sẽ góp phần giảm thời gian xử lý vì nó làm giảm số điểm còn lại, mặc dù hiệu quả của nó trong vấn đề này là ít quan trọng hơn so với Bộ lọc thông dải và Down Sampling
Phương pháp loại bỏ giá trị ngoại lai được trình bày trong Rus09 dựa trên phân tích thống kê các điểm lân cận Khoảng cách từ mỗi điểm đến các vùng lân cận được tính toán, giả sử phân bố Gaussian với độ lệch trung bình và độ lệch chuẩn Những điểm có khoảng cách trung bình vượt quá một khoảng thời gian nhất định sẽ được xem là giá trị ngoại lai và bị loại bỏ khỏi bộ dữ liệu.
2.9.4 Xây dựng lại bề mặt
Bề mặt được xây dựng lại nhằm cải thiện việc loại bỏ dữ liệu bất thường dựa trên thuật toán Moving Least Squares (MLS) Thuật toán này nội suy đa thức bậc cao giữa các vùng lân cận cục bộ, tạo ra bề mặt chính xác cho một tập hợp các điểm Quá trình này giúp làm mịn và lấy mẫu lại đám mây nhiễu, từ đó cung cấp ước tính chính xác hơn về bề mặt chuẩn và độ cong, tiếp tục được sử dụng để ghi lại các đám mây điểm.
Kỹ thuật xác định các cặp điểm tương đồng giữa hai ảnh
Để phân biệt giữa các bề mặt hình học, cần so sánh các điểm ảnh với yêu cầu đặc tính và số liệu tốt hơn Khái niệm về điểm 3D như một thực thể duy nhất với tọa độ Descartes không còn phù hợp, thay vào đó là mô tả cục bộ vị trí của nó, phản ánh các đặc tính hình dáng hoặc tính năng hình học Việc so sánh cặp điểm ảnh không rõ ràng có thể được giải quyết bằng cách xem xét vùng lân cận Các tính năng kết quả sẽ đơn giản cho các điểm trên bề mặt giống nhau, trong khi sẽ khác biệt cho các điểm được phân biệt rõ ràng, nhờ vào việc tách biệt các đặc điểm cục bộ trong quá trình biểu diễn.
- Phép biến đổi cố định (rigig transformations) - đó là, phép quay 3D và tịnh tiến 3D không ảnh hưởng đến kết quả ước lượng vector đặc trưng F;
- Thay đổi mật độ lấy mẫu (varying sampling density) - về nguyên tắc, việc lấy mẫu nhiều hơn hoặc ít hơn đều có cùng vector tính năng
- Nhiễu (noise) - tính năng biểu diễn điểm ảnh phải giống hoặc tương tự nhau
Hình 2.17: Các cặp điểm tương đồng giữa hai đám mây điểm ảnh
Thuật toán SURF (Speeded-Up Robust Features) là một trong những phương pháp hiệu quả nhất để xác định các cặp điểm tương đồng giữa hai ảnh Thuật toán này không chỉ nhanh chóng mà còn đảm bảo chất lượng kết quả cao, giúp tối ưu hóa quá trình nhận diện và so sánh hình ảnh.
Features) [5] thông qua ba bước:
Bước đầu tiên là xác định các điểm đặc trưng xấp xỉ trên ma trận Hessian và ảnh tích lũy, giúp giảm thiểu đáng kể khối lượng tính toán Việc sử dụng bộ lọc hộp (box filter) sẽ tăng tốc quá trình tính toán, đồng thời vẫn đảm bảo kết quả tương tự như khi áp dụng hàm Gaussian, như thể hiện trong Hình 2.18.
Bước 2 là tính toán hướng cho các điểm đặc trưng dựa vào vị trí trong không gian ảnh, bao gồm bán kính hình tròn và hướng của điểm đặc trưng Qua đó, chúng ta xác định mô tả chi tiết, bao gồm nhiều hình vuông nhỏ để rút trích thông tin từ các vùng không gian ảnh xung quanh điểm đặc trưng.
Bước 3: Tiến hành so khớp các điểm đặc trưng giữa hai bức ảnh, như thể hiện trong Hình 2.20, nhằm xác định những cặp điểm tương đồng tốt nhất Quá trình này sử dụng phương pháp đánh chỉ mục đồng thời để xác định điểm đặc trưng mà không cần tính toán lại, khác với các thuật toán truyền thống.
Hình 2.18: Áp dụng Box filter, 1 bước trong quá trình tăng tốc xác định điểm đặc trưng của SURF
Hình 2.19: Mô tả đặc trưng thông qua hướng và thông tin của các vùng lân cận
Hình 2.20: Đặc trưng của điểm ảnh
Kỹ thuật xác định vị trí 3D (Pose) tương đối giữa hai đám mây
Trong nhiều ứng dụng như chương trình Meshlab, thư viện PCL và RGBDemo của Ph.D Burrus Nicolas, kỹ thuật ghép nối đám mây thường sử dụng sự kết hợp giữa RANSAC và thuật toán Levenberg–Marquardt để tối ưu hóa hàm biến đổi giữa hai đám mây Vị trí tương đối giữa hai đám mây được xác định bởi hai thành phần chính: ma trận xoay và ma trận tịnh tiến, nhằm biến đổi một đám mây thành đám mây còn lại với độ lỗi tối ưu nhất, tức là khoảng cách giữa các cặp điểm tương đồng sau khi biến đổi.
2.11.1 Tối ưu hóa ma trận biến đổi giữa hai đám mây điểm
Thuật toán Levenberg – Marquardt là một phương pháp tối ưu hóa lặp, bắt đầu với các tham số khởi tạo có độ lỗi cao Qua mỗi lần lặp, độ lỗi giảm dần nhờ vào việc lựa chọn tham số ước lượng phù hợp hơn, được gọi là tham số damping Để thuật toán hoạt động hiệu quả, cần cung cấp các thông tin như các cặp điểm tương đồng (x i, y i), hàm biến đổi f từ x sang y, tham số 𝛽, và cách xác định độ lỗi S sau khi biến đổi.
đạt tối thiểu Áp dụng trong trường hợp cần tính vị trí tương đối giữa hai đám mây, thì các thông tin này được ánh xạ như sau:
Cặp điểm tương đồng (x i , y i ) là những điểm tương đồng trên ảnh RGB, được xác định thông qua thuật toán tìm đặc trưng ảnh Những điểm này được ánh xạ vào không gian 3D và đã được lọc để loại bỏ các điểm không xác định được chiều sâu hoặc không chính xác.
Hàm biến đổi f là phép chiếu trong không gian 3D, chuyển đổi điểm x thành điểm y’ thông qua các thao tác tịnh tiến và xoay Để thực hiện phép biến đổi này, cần sử dụng ma trận xoay, ma trận tịnh tiến và điểm x làm đối số Kết quả của quá trình này sẽ là điểm y’ tương ứng.
- Tham số 𝛽: chính là ma trận xoay và tịnh tiến trong không gian 3D, cũng chính là biến số cần tối ưu trong thuật toán này
- Cách xác định độ lỗi S: là hàm tính bình phương khoảng cách trong không gian 3D giữa hai điểm y và điểm y’ (x sau biến đổi)
Thuật toán đơn giản có thể được diễn giải là việc tìm kiếm một ma trận biến đổi, bao gồm tịnh tiến và xoay, nhằm chuyển đổi đám mây điểm chứa các điểm x_i thành một đám mây điểm mới.
2.11.2 Xác định ma trận biến đổi tốt nhất [3]
Trong quá trình xác định các cặp điểm tương đồng 3D, không thể tránh khỏi việc xuất hiện một số cặp điểm không chính xác, khi mà một số điểm trong đám mây A nằm trên đường biên của đối tượng, trong khi điểm tương ứng trong đám mây B lại nằm trên tường Điều này dẫn đến sai số về khoảng cách và hướng trong không gian 3D, ảnh hưởng đến kết quả tính toán ma trận biến đổi trong thuật toán trước đó Để khắc phục vấn đề này, thuật toán Ransac thường được áp dụng.
Thuật toán RANSAC (RANdom SAmple Consensus), được phát triển bởi các nhà thống kê Fischler và Bolles, là một phương pháp lặp để lấy mẫu ngẫu nhiên từ tập dữ liệu chứa nhiều phần tử lỗi (outlier) RANSAC nổi bật nhờ khả năng xử lý hiệu quả, chỉ cần chọn một số điểm tối thiểu mà vẫn đạt được kết quả tương đương so với việc sử dụng nhiều điểm hơn Hai vấn đề quan trọng khi áp dụng RANSAC là xác định kích thước mẫu tối thiểu phù hợp và số lần lặp cần thiết để đạt được kết quả chất lượng Trong mỗi vòng lặp, số lượng phần tử tối thiểu và số lần lặp sẽ được điều chỉnh dựa trên tỷ lệ các phần tử phù hợp (inlier) và lỗi (outlier) từ các lần lặp trước đó.
Hình 2.21: Minh họa việc dùng RANSAC áp dụng cho việc tìm đường thẳng trong
Giải thuật tìm đường thẳng ax + by + c =0 bằng thuật toán RANSAC được mô tả như sau:
Đầu vào: data - tập hợp các điểm k - số lần lặp t - ngưỡng (threshold) sai số để xác định điểm nào đó có khớp mô hình không
Đầu ra: best_model - mô hình tốt nhất best_consensus_set - tập hợp các điểm khớp với best_model best_model = null best_consensus_set = null best_num_points = 0
Lặp k lần : consensus_set = tập hợp 2 điểm ngẫu nhiên thuộc data model = mô hình đường thẳng suy ra từ 2 điểm trên
Đối với mỗi điểm trong dữ liệu không nằm trong consensus_set, ta tính khoảng cách từ điểm đến đường thẳng Nếu khoảng cách nhỏ hơn ngưỡng t (điểm được xem là thuộc mô hình khi sai số dưới mức cho phép), ta sẽ thêm điểm đó vào consensus_set Số lượng phần tử trong consensus_set được cập nhật, và nếu số lượng này lớn hơn best_num_points, ta sẽ cập nhật best_model, best_consensus_set và best_num_points.
Trả về giá trị: best_model và best_consensus_set
Thuật toán RANSAC có khả năng xác định mô hình mặt phẳng trong không gian ba chiều, với phương trình dạng ax + by + cz + d = 0 Để tìm ra mô hình mặt phẳng, cần ba điểm thay vì hai điểm như trong trường hợp mô hình đường thẳng Cấu hình thuật toán bao gồm các lệnh như setModelType(pcl::SACMODEL_PLANE), setMethodType(pcl::SAC_RANSAC) và thiết lập ngưỡng khoảng cách với setDistanceThreshold(0.02), tương đương với 2cm.
Hình 2.22: Minh họa kết quả ghép 2 đám mây sau khi áp dụng Ransac và
Levenberg–Marquardt để xác định ma trận biến đổi
THUẬT TOÁN THỰC HIỆN
Khởi tạo đám mây điểm đầu tiên
Đám mây điểm ảnh của vật thể trên màn hình là tập hợp nhiều điểm nhỏ rời rạc, mỗi điểm được tạo ra từ quá trình đo khoảng cách giữa camera và bề mặt vật thể Quá trình này là một hình thức lấy mẫu ngẫu nhiên, được thực hiện theo thư viện PCL mặc định Hình 3.2 dưới đây minh họa lưu đồ khởi tạo đám mây đầu tiên.
Hình 3.2 trình bày lưu đồ thuật toán khởi tạo đám mây điểm đầu tiên Đám mây điểm này chỉ hiển thị các phần bề mặt mà camera có thể quan sát, trong khi những khu vực khuất không được hiển thị Để giải quyết vấn đề này, đề tài cần thực hiện việc ghép và sắp xếp các đám mây điểm từ nhiều vị trí khác nhau nhằm bổ sung cho những phần thiếu hụt.
Hình 3.3: Đám mây điểm ảnh thực tế thu được từ camera và dữ liệu của đám mây
Giảm số lượng điểm ảnh cho mỗi đám mây điểm ảnh
Với hơn 300.000 điểm ảnh, tốc độ xử lý trở nên chậm chạp Do đó, cần giảm số lượng mẫu để đảm bảo tổng số điểm ảnh còn dưới 50.000.
Chụp và lưu đám mây đầu tiên Gán đám mây đầu tiên thành đám mây toàn cục
Lưu đồ cho quá trình thực hiện giảm số lượng điểm ảnh dùng Voxel Grid trong PCL như Hình 3.4
Hình 3.4: Lưu đồ lọc đám mây dùng Voxel Grid
Tìm điểm đặc trưng của đám mây
Trong mỗi đám mây điểm, chúng ta xác định điểm đặc trưng đại diện cho các tính năng hoặc đối tượng trong đám mây đó Bằng cách sử dụng các điểm đặc trưng này, chúng ta tiến hành so sánh từng cặp điểm giữa đám mây điểm đầu tiên và đám mây điểm thứ hai.
Lưu đồ thuật toán tìm đặc trưng của đám mây được mô tả trong Hình 3.5 Kết quả từ quá trình này sẽ được lưu lại để hỗ trợ tìm cặp điểm tương đồng khi thu thập đám mây điểm tiếp theo Khi có đám mây mới xuất hiện, quá trình tìm điểm tương đồng sẽ được thực hiện lại từ đầu để xác định và lưu trữ điểm đặc trưng của đám mây mới.
Tăng Leafsize 1mm Đám mây đã lọc
Hình 3.5: Lưu đồ tìm điểm đặc trưng của đám mây
Trong đó: k là phổ của điểm p k
Tìm điểm tương đồng giữa hai đám mây
Xét hai đám mây điểm ảnh thu được từ hai vị trí của robot mô tả như sau Robot được đặt cách bức tường 1 mét
Camera Kinect có góc mở tối đa 58 độ theo chiều ngang, vì vậy để duy trì vùng trùng lặp giữa hai khung hình, robot chỉ nên xoay với góc nhỏ hơn 58 độ.
Trong nghiên cứu này, tôi bắt đầu với giá trị góc là 50 độ để duy trì vùng trùng lắp giữa hai đám mây, như thể hiện trong Hình 3.7 Đám mây đầu tiên được ghi lại khi robot xoay trái 25 độ so với phương vuông góc của bức tường, trong khi đám mây thứ hai được ghi nhận khi robot xoay phải 50 độ Quá trình xoay của robot được giám sát bởi cảm biến góc quay IMU gắn trên robot, đảm bảo độ chính xác trong việc điều khiển quay.
Hình 3.6 trình bày 50 0, cho thấy khoảng cách và vị trí đặt robot Như mô tả, vùng trùng lặp giữa hai đám mây điểm ảnh được thể hiện trong Hình 3.7 bên dưới.
Tìm vùng lân cận của điểm p q
Tìm k giữa điểm p q với p k xung quanh
Không phải điểm đặc trưng
Xác định điểm đặc trưng
k thay đổi đột ngột? Đúng Sai
Hình 3.6: Lưu đồ điều khiển robot xoay phải 50 o
Hình 3.7: Vùng trùng lắp giữa hai đám mây điểm ảnh
Camera Kinect có góc mở 58 độ theo chiều ngang, cho phép tính toán vùng giao nhau giữa hai vị trí của robot sau khi xoay phải 50 độ Sơ đồ bố trí hai góc mở của camera tương ứng với hai vị trí này được thể hiện trong Hình 3.8 dưới đây.
Chụp và lưu đám mây 1
Chụp và lưu đám mây 2 Đúng
Hình 3.8: Tìm độ rộng của vùng giao nhau giữa hai frame ảnh
Trong đó: x : bề ngang của vùng giao nhau giữa 2 vị trí robot y : góc giao nhau giữa 2 vị trí robot l : khoảng cách từ camera (robot) đến bức tường
Với góc mở của Kinect là 44 độ theo chiều dọc và camera gắn trên robot có độ cao 45cm, ta có thể tính chiều cao của vùng giao nhau giữa hai vị trí của robot Sơ đồ bố trí hai góc mở của camera tương ứng với hai vị trí này được mô tả trong hình ảnh.
- h – độ cao từ tâm camera đến giới hạn trên của góc mở camera
- h’E0mm - độ cao tính từ mặt đất đến tâm của camera
Từ Phương trình (3.2) và (3.3), ta tính được diện tích của vùng giao nhau giữa hai vị trí robot như sau:
Trong đó: s - diện tích mặt phẳng trùng lắp giữa hai vị trí của robot
Sử dụng thư viện fpfh.h trong PCL, chúng ta có thể xác định số điểm ảnh tương đồng giữa hai đám mây điểm ảnh Đáng chú ý, bán kính tìm kiếm điểm tương đồng r fpfh được điều chỉnh thành 200mm, thay vì 140mm như đã đề cập trong Phương trình (3.2), nhằm đảm bảo độ an toàn trong quá trình tìm kiếm.
Lưu đồ cho quá trình tìm cặp điểm tương đồng như sau:
Hình 3.10: Lưu đồ xác định cặp điểm tương đồng giữa hai đám mây
Tìm ma trận biến đổi giữa hai đám mây điểm ảnh
Sử dụng thư viện PCL để tìm kiếm ma trận biến đổi xoay trực giao R trong điểm ảnh, kết quả được ghi lại từ màn hình máy tính và có giá trị như thể hiện trong Hình 3.11.
Hình 3.11: Hàm biến đổi điểm ảnh ở đám mây gốc đến điểm ảnh ở đám mây đích
Ghép nhiều đám mây điểm khác nhau sử dụng thuật toán SAC-IA và
Lưu đồ thực hiện ghép nhiều đám mây được trình bày như Hình 3.12 bên dưới
Utilizing the SAC-IA library and the ICP library within PCL enables the merging of multiple point clouds Effective use of these libraries requires the configuration of parameters such as min_sample_distance, max_correspondence_distance, and nr_iterations.
Dựa vào Phương trình (3.2), nhập vào giá trị khoảng cách nhỏ nhất để tìm kiếm và sắp xếp max_correspondence_distance bằng 200mm
Hình 3.12: Lưu đồ ghép liên tiếp nhiều đám mây điểm ảnh dùng SAC-IA kết hợp
Với vị trí của robot như mô tả trong mục 3.4 và góc mở của camera nhìn từ trên xuống (như trong Hình 3.13), tìm thông số nr_iterations như sau:
Hình 3.13: Bề rộng của frame ảnh khi robot cách tường 1 mét
Với kết quả ở Mục 0, chọn :
_ 173.66 min _ sample _ distance 6 nr iterations (3.7)
Để đảm bảo khả năng ghép tốt nhất, chọn số lần lặp thực tế nr_iterations lớn hơn giá trị tính toán, cụ thể là 200 lần lặp Nhập các giá trị min_sample_distance, max_correspondence_distance và nr_iterations vào mã code chương trình để thực hiện việc ghép hai đám mây điểm.
TemplateAlignment () : min_sample_distance_ (0.006f), max_correspondence_distance_ (0.200f*0.200f), nr_iterations_ (200)
// Intialize the parameters in the Sample Consensus Intial Alignment
(SAC-IA) algorithm sac_ia_.setMinSampleDistance (min_sample_distance_); sac_ia_.setMaxCorrespondenceDistance (max_correspondence_distance_); sac_ia_.setMaximumIterations (nr_iterations_);
Chiếu đám mây xuống nền nhà
Để chuyển đổi dữ liệu đám mây 3D thành hình chiếu 2D trên mặt phẳng nền nhà, camera được đặt cách mặt đất 45cm Quá trình này bao gồm việc thực hiện phép biến đổi khử độ cao, tức là chiếu điểm ảnh xuống mặt phẳng nền nhà Đầu tiên, cần xác định mặt phẳng nền bằng cách sử dụng thư viện Plannar segmentation trong PCL, giúp tách các điểm ảnh có cấu trúc phẳng Sau đó, thuật toán RANSAC sẽ được áp dụng để chọn tập điểm ảnh có tổng số điểm lớn nhất Lưu đồ thực hiện chiếu đám mây xuống nền nhà được minh họa rõ ràng trong Hình 3.15.
Hình 3.14: Chiếu một điểm ảnh xuống nền nhà
KẾT QUẢ
Thi công phần cứng và phần mềm sử dụng
Robot được thiết kế với hệ thống động lực di chuyển dạng Omni 3 bánh hình tam giác, với các bánh bố trí lệch nhau 120 độ, giúp robot dễ dàng xoay tại chỗ Cấu trúc này cho phép điều khiển robot di chuyển thẳng (tiến hoặc lùi) và xoay (trái hoặc phải) thông qua việc đồng bộ hóa ba động cơ của ba bánh xe Omni Một số thông số cơ bản của robot được trình bày trong Bảng 4.1.
Hình 4.1: Robot di động được dùng trong đề tài
Hai phần mềm được sử dụng chính trong đề tài là:
- Visual Studio 2010 [http://www.visualstudio.com/]: dùng để viết code lập
- Point Cloud Library ver1.6 [http://pointclouds.org/]: thư viện đồ sộ hỗ trợ giao tiếp Kinect và các thuật toán liên quan đến depth-camera
Bảng 4.1: Thông số cơ bản của robot di động
Bán kính bánh xe 16 cm
Chiều cao (tính đến tâm Kinect) 45 cm
Encoder nội của động cơ 200 xung / vòng
Board điều khiển Arduino Pro Atmega328
Vận tốc (dài) tối đa 1.2 m/phút
Ngoài ra, còn các phần mềm khác hỗ trợ thêm Point Cloud Library hoạt động hoàn chỉnh như OpenNI, Github, Eigen, Boost, Cmake…
Giao tiếp và điều khiển robot từ máy tính xuống board Arduino Pro được thực hiện qua mã lệnh, ví dụ như mã lệnh “F1” chỉ định robot di chuyển về phía trước với vận tốc cấp độ “1”, tương ứng với tốc độ 1.2m/phút Board Arduino sẽ điều chỉnh tốc độ của ba động cơ dựa trên nguyên lý PWM để robot tiến về phía trước Bảng mã lệnh điều khiển đã được thiết lập sẵn và có thể tham khảo trong Bảng 4.2, trong khi thông số cài đặt giao tiếp giữa máy tính và robot được trình bày trong Bảng 4.3.
Hình 4.2: Board điều khiển robot và máy tính sử dụng trong đề tài
Bảng 4.2: Bảng mã lệnh điều khiển cơ bản
Robot F1 di chuyển về phía trước với tốc độ 1.2 m/phút, trong khi Robot F2 di chuyển với tốc độ 0.5 m/phút Đối với Robot B1, nó lùi lại với tốc độ 1.2 m/phút, và Robot B2 lùi lại với tốc độ 0.5 m/phút.
Rx Robot xoay phải với góc độ là x
Bảng 4.3: Thông số cài đặt giao tiếp cổng USB COM
Thông số Giá trị cài đặt
Giảm số lượng điểm ảnh
Sau khi chụp và lưu đám mây điểm ảnh đầu tiên, tiến hành lọc liên tục với kích thước Leafsize tăng dần từ 1mm, mỗi lần lặp sẽ tăng thêm 1mm Kết quả của quá trình này là sự giảm số lượng điểm ảnh, như được trình bày trong Bảng 4.4 dưới đây.
Bảng 4.4: Bảng số lượng điểm ảnh mỗi frame sau mỗi lần lọc
Số điểm ảnh Ảnh gốc 307200
Lọc 1mm x 1mm x 1mm 251365 Lọc 2mm x 2mm x 2mm 237717 Lọc 3mm x 3mm x 3mm 128294 Lọc 4mm x 4mm x 4mm 78267 Lọc 5mm x 5mm x 5mm 50002 Lọc 6mm x 6mm x 6mm 36457
Ghi chú : số liệu ở trên được thực hiện đo đạc với máy tính cá nhân Dell XPS
Sau khi thực nghiệm với nhiều giá trị lọc khác nhau, số lượng điểm ảnh đã giảm đáng kể và tốc độ xử lý tăng lên Tuy nhiên, sự thưa thớt của đám mây điểm ảnh đã làm giảm số lượng cặp điểm tương đồng Vì vậy, trong nghiên cứu này, giá trị lọc tối ưu được chọn là 6mm.
Thực hiện ghép hai đám mây điểm ảnh với góc xoay là 50 o
Quá trình ghép hai đám mây điểm ảnh diễn ra trong không gian phòng có diện tích 4m x 4m, sử dụng các vật đánh dấu như ghế nhựa Đám mây điểm ảnh màu đỏ được thu thập khi robot xoay phải 50 độ so với vị trí của đám mây màu xanh lá cây Khi hai đám mây này được biểu diễn trên cùng một tọa độ không gian của camera, chúng bị chồng lên nhau và lệch, với góc lệch xuất hiện do sự xoay phải 50 độ của robot.
Hình 4.3: Hai đám mây điểm ảnh và vật mốc tự nhiên (ghế) trước khi ghép
Ma trận biến đổi từ đám mây đích sang đám mây nguồn được trình bày trong Hình 4.4 Dựa vào ma trận này và chỉ số Fitness Score, thông số được đưa vào tập cài đặt của ICP để tiến hành ghép hai đám mây Kết quả của quá trình ghép hai đám mây được thể hiện trong Hình 4.5 và Hình 4.6.
Hình 4.5: Ghép hai đám mây điểm ảnh dùng SAC-IA và ICP
Hình 4.6: Hai đám mây điểm ảnh được ghép thành công với vật mốc tự nhiên là chiếc ghế
Thực hiện ghép hai đám mây khi robot tịnh tiến về phía trước 47 4.5 Thực hiện ghép liên tiếp nhiều đám mây và chiếu xuống nền tạo bản
Khi robot di chuyển tịnh tiến về phía trước, hai khung hình trước và sau khi di chuyển thực chất chỉ là một, nhưng về mặt hình học, khung hình sau sẽ phóng to hơn khung hình ban đầu với cùng kết cấu Nếu robot tiến gần một bề mặt phẳng lớn, như bức tường, thì khung hình sau khi di chuyển chỉ chiếm một phần nhỏ của khung hình trước.
Trong nghiên cứu này, robot được thử nghiệm với khoảng cách tịnh tiến về phía trước là 1 mét và khoảng cách tối đa từ robot đến bức màn là 2,5 mét Kết quả của thí nghiệm được thể hiện trong Hình 4.9 dưới đây Các bước thực hiện cũng được áp dụng tương tự cho các trường hợp khác.
Hình 4.7: Vật mốc ở xa (ảnh trái) và vật mốc sau khi robot tịnh tiến đến gần (ảnh phải)
Hình 4.8: Frame sau khi tịnh tiến (ảnh phải) là một phần của frame trước (ảnh trái) a) b)
Hình 4.9: Hai đám mây điểm ảnh được ghép thành công trong trường hợp robot tịnh tiến về phía trước chạm tường
Hình 4.10: Hai đám mây điểm ảnh được ghép thành công trong trường hợp robot tịnh tiến về phía trước có vật mốc
4.5 Thực hiện ghép liên tiếp nhiều đám mây và chiếu xuống nền tạo bản đồ 2D
Kết hợp robot xoay và tịnh tiến để ghép nhiều đám mây trong môi trường trong nhà, tạo ra đám mây toàn cục 3D và chiếu xuống mặt phẳng nền, hình thành bản đồ 2D như Hình 4.12 Do quá trình ghép liên tiếp bảy đám mây điểm ảnh tương ứng với các vị trí trong Hình 4.11, thời gian xử lý chậm, nên chỉ hiển thị kết quả cuối cùng sau khi chiếu xuống nền nhà, bỏ qua các xử lý trung gian.
Hình 4.11: Các vị trí dừng chụp đám mây điểm ảnh cho trường hợp ghép liên tiếp
Hình 4.12: Kết quả ghép liên tiếp nhiều đám mây và chiếu xuống mặt phẳng nền
Kết quả cho thấy việc xây dựng bản đồ 2D cho robot di chuyển đã thành công mà không phụ thuộc vào độ chính xác của cảm biến hay độ phức tạp của môi trường xung quanh Sự kết hợp này cùng với việc tách chọn đặc trưng của đối tượng 3D sẽ giải quyết triệt để vấn đề định vị cho robot di động dựa vào các vật mốc tự nhiên.
5.2 Hướng phát triển của đề tài
Kết quả từ quá trình xây dựng bản đồ 2D là một dải điểm ảnh thay vì một đường thẳng rõ ràng Để khắc phục vấn đề này, tác giả đề xuất sử dụng thuật toán RANSAC nhằm xử lý hiệu quả tình huống trên.
Tốc độ xử lý hiện tại vẫn chưa đạt yêu cầu do số lượng điểm ảnh lớn và tốc độ tính toán chậm Để khắc phục vấn đề này, tác giả đề xuất tối ưu hóa thuật toán ghép nhiều đám mây điểm ảnh dựa trên số lượng cặp điểm tương đồng.
Một nhược điểm trong việc xây dựng bản đồ là độ chính xác của nó có thể bị sai số Nguyên nhân của điều này bao gồm việc lấy độ sâu (khoảng cách) bằng camera Kinect, dẫn đến việc tạo ra một dải điểm ảnh Khi áp dụng thuật toán Ransac để chuyển đổi những điểm này thành một đường thẳng, độ chính xác của kết quả cũng cần được xem xét kỹ lưỡng.
PHỤ LỤC 1: CHƯƠNG TRÌNH GIAO TIẾP MÁY
/* - Header giao tiep voi Robot Luan van tot nghiep cua Dao Hong Phong qua cong USB Phan mem lap trinh: Visual Studio 2010
Vi dieu khien trong ROBOT : Atemega64
#include using namespace std;
DWORD dwBytesRead %; unsigned int i=1; unsigned int n = 25; char szBuff[25 + 1] = {0}; char Sonar[12 + 1] = {0}; float limit_1, limit_2, mul_1, mul_2;
{ szBuff[0]=0; if(!ReadFile(hSerial, szBuff, 1, &dwBytesRead, NULL))
{ std::cout