This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Cảm biến Kinect và ứng dụng trong xe tự hành tránh vật cản
Lê Trung Kiên ĐKTĐ 2- K53 1
MỤC LỤC
1.Giới thiệu cơ bản về Kinect ......................................................................... 3
1.1 cấu trúc phần cứng. ................................................................................................. 4
1.1.1 Camera RGB .................................................................................................... 4
1.1.2 Cảm biến độ sâu .............................................................................................. 4
- Chứa các cấu trúc dữ liệu và cơ chế tính toán, ước lượng 3D từ các
dữ liệu điểm PCD
- 3D Features biểu diễn chính xác điểm 3D hoặc vị trí trong không
gian để mô tả phần hình khối dựa vào thông tin có được xung
quanh điểm. Vùng dữ liệu được chọn lân cận điểm truy vấn
thường gọi là K-neighborhood.
2.1.3 Module Filters:
PCL_filters Chứa các kỹ thuật loại bỏ nhiễu.
Cảm biến Kinect và ứng dụng trong xe tự hành tránh vật cản
Lê Trung Kiên ĐKTĐ 2- K53 9
2.1.4 Module Geometry:
Chứa tất cả các cấu trúc dữ liệu và giải thuật để tính toán hình học.
2.1.5 Module IO:
PCL_IO: Chứa các hàm và các lớp để đọc và ghi dữ liệu dạng PCD,
có thể thu thập dữ liệu từ nhiều nguồn khác nhau (Trong đồ án này
dùng Kinect).
2.1.6 PCL_Kdtree:
Thư viện cung cấp cấu trúc dữ liệu Kd_tree, sử dụng FLANN giúp
nhanh chóng tìm kiếm vùng gần nhất (nearest neighbors searches).
Cảm biến Kinect và ứng dụng trong xe tự hành tránh vật cản
Lê Trung Kiên ĐKTĐ 2- K53 10
Kd-tree là một cấu trúc dữ liệu phân để vùng không gian lưu trữ tập
K-dimention điểm dưới dạng cây do đó dễ dàng phân loại và tìm kiếm.
Có thể sử dụng để tìm sự tương ứng giữa các nhóm điểm, đặc tả tính
năng, định nghĩa các vùng lân cận xung quanh điểm hoặc các điểm.
2.1.7: PCL_Keypoint:
Là thư viện chứa thực thi của 2 thuật toán nhận dạng “Point clound
keypoint”.
Key Point (hay interest point) là các điểm trong ảnh hoặc trong point
cloud mà có tính chất ổn định, riêng biệt và có thể dễ dàng phát hiện ra.
Thông thường số lượng Key Point nhỏ hơn tổng số điểm trong cloud.
2.1.8 PCL_Octree:
Chứa các thuật toán hiệu quả để tạo nên một cấu trúc dữ liệu phân cấp
từ dữ liệu point cloud. Nó cho phép phân vùng không gian,
downsampling (giảm số lượng các mẫu do đó tăng tốc độ tính toán) và
thực hiện các phép toán tìm kiếm trong tập dữ liệu PointCloud. Mỗi nút
Cảm biến Kinect và ứng dụng trong xe tự hành tránh vật cản
Lê Trung Kiên ĐKTĐ 2- K53 11
Octree có 8 nút con hoặc không có nút con nào. Nút gốc (mầu đỏ hình
dưới )được biểu diễn trong 1 hình lập phương bao toàn bộ các điểm con.
Tại mỗi cấp của cây, không quan được chia thành 2 do đó tăng độ phân
giải cho điểm ảnh không gian 3 chiều.
Thư viện này cũng cung cấp các chương trình tìm kiếm lân cận hiệu
quả.
2.1.9 Module registrantion (PCL_registration):
Kết hợp các bộ dữ liệu vào một mô hình chung, thống nhất thường
được thực hiện bằng một kỹ thuật gọi là registration.
Ý tưởng chính là xác định các điểm tương ứng trong bộ dữ liệu và tìm
một chuyển đổi khoảng cách tối thiểu các điểm tương ứng.
2.1.10 Module PCL_sample_consensus:
Thư viện pcl_sample_consensus có khả năng tách các nhóm điểm có cùng
tính chất (Sample Consensus hay SAC) giống như thuật toán RANSAC (Tìm
kiếm đường thẳng trong tập hợp các điểm). Các nhóm điểm có thể là các mặt
Cảm biến Kinect và ứng dụng trong xe tự hành tránh vật cản
Lê Trung Kiên ĐKTĐ 2- K53 12
phẳng, mặt cầu, trụ. Thư viện này rất thích hợp trong các ứng dụng dò tìm
các đối tượng như tường, cửa, các vật trên bàn…
2.1.11 PCL_Search:
Cung cấp các phương pháp tìm kiếm lân cận (nearest neighbors) bằng
cách sử dụng các cấu trúc dữ liệu khác nhau, bao gồm:
- Kd_tree (từ thư viện PCL_Kdtree)
- Octrees (từ thư viện PCL_Octrees)
- Brute foce (Thuật toán)
- Các tìm kiếm đặc biệt cho các bộ dữ liệu có tổ chức.
2.1.12 PCL_Segmentation:
Chứa các thuật toán để phân chia Point Cloud thành các nhóm riêng biệt. Các
thuật toán này thích hợp nhất khi xử lý các point Cloud bao gồm các vùng
không gian bị cô lập. Trong trường hợp như vậy, các clustering thường chia
nhỏ để sau đó có thể xử lý độc lập.
2.1.13 PCL_surface:
Cảm biến Kinect và ứng dụng trong xe tự hành tránh vật cản
Lê Trung Kiên ĐKTĐ 2- K53 13
Là thư viện thích hợp cho việc xây dựng lại các bề mặt từ dữ liệu quét
3D. Các đối tượng chính gồm vỏ, bề mặt lưới, bề mặt nhẵn hay bình thường.
Khi có nhiễu có thể làm mịn và lấy mẫu lại.
Chia lưới ( meshing ) là một cách tổng quát để tạo ra các bề mặt điểm.
Hiện nay có 2 thuật toán là a very fast triagulation of the original points và
aslower meshing that does smoothing and hold filling as well.
Có thể dùng thư viện để tạo ra một thân lồi hoặc lõm thích hợp cho
đại diện bề mặt đơn giản hóa hoặ chỉ ra các ranh giới.
Cảm biến Kinect và ứng dụng trong xe tự hành tránh vật cản
Lê Trung Kiên ĐKTĐ 2- K53 14
2.1.14: PCL_visualization:
Thư viện được tạo ra có thể nhanh chóng hiển thị các kết quả thuật
toán trên dữ liệu 3D. Thư viện cung cấp:
- Các phương pháp dựng hình và thiết lập thuộc tính ảnh, mầu sắc,
kích thước cho bất kì bộ dữ liệu nào có kiểu “PCL::PointCloud<T>”
- Vẽ các hình 3D cơ bản từ bộ điểm hoặc phương trình tham số.
Cảm biến Kinect và ứng dụng trong xe tự hành tránh vật cản
Lê Trung Kiên ĐKTĐ 2- K53 15
- Vẽ các biểu đồ.
2.2. Cấu trúc dữ liệu cơ bản của PCL
2.2.1 PointCloud:
Kiểu dữ liệu cơ bản trong PCL là PointCloud. Một PointCloud là 1 lớp C++ bao
gồm:
Width (int): Xác định chiều dài tập dữ liệu bằng số lượng điểm. “Width” có
2 nghĩa là
o Có thể xác định tổng số các điểm trong cloud (bằng số lượng các phần
tử trong cloud) cho bộ dữ liệu có tổ chức.
Cảm biến Kinect và ứng dụng trong xe tự hành tránh vật cản
Lê Trung Kiên ĐKTĐ 2- K53 16
o Có thể xác định chiều rộng (tổng số điểm liên tiếp) của một tập dữ
liệu có tổ chức
Chú ý: Tập dữ liệu điểm có tổ chức là tập dữ liệu được chia thành các hàng và
cột giống như ma trận.
Vd: cloud.width=640;// Tao ra 640 diem tren mot dong
Height (int): Tương tự width nhưng đối với cột trong ma trận điểm.
Nếu hieght=1 thì dữ liệu không được tổ chức (có thể dùng tính chất này để
kiểm tra một tập dữ liệu có được tổ chức hay không)
Vd:
cloud.width = 640; // Khai bao mot anh co cau truc, gom 640 dong va 480 cot cloud.height = 480; // tong so diem anh la 640*480=307200.
Points (std::vector<PointT>)
Chứa các mảng dữ liệu lưu trữ tất cả các điểm có kiểu pointT.
Kiểu PointT có thể là pcl::PointXYZ, pcl::PointXYZRGB,
pcl::PointXYZRGBA…
Ví dụ:
pcl::PointCloud<pcl::PointXYZ> cloud; std::vector<pcl::PointXYZ> data = cloud.points;
Is_dense(bool)
Trả về giá trị logic, nếu tất cả giá trị trong points hữu hạn => True ngược lại
là False.
Ngoài ra lớp pointCloud còn chứa các thành phần chứa các tùy chọn của
sensor như Sensor_origin, sensor_orientation. Các thành phần này thường ít
dùng trong các thuật toán của PCL.
2.2.2 Định dạng PCD:
Định dạng PCD là một định dạng dùng để lưu trữ dữ liệu 3d pointCloud.
Định dạng này gồm 2 phần là header và phần dữ liệu.
Cảm biến Kinect và ứng dụng trong xe tự hành tránh vật cản
Lê Trung Kiên ĐKTĐ 2- K53 17
- Mỗi file có một phần header xác định các tính chất, thuộc tính của dữ
liệu mà nó lưu trữ. Header của PCD được mã hóa bằng mã ASCII.
- Trong header gồm có
o VERSION: xác định phiên bản định dạng PCD
o FIELDS: Xác định tên các chiều và các trường của mỗi điểm:
Vd:
FIELDS x y z # XYZ data FIELDS x y z rgb # XYZ + colors FIELDS x y z normal_x normal_y normal_z # XYZ + surface normals FIELDS j1 j2 j3 # moment invariants ...
o SIZE: Xác định kích thước các chiều tính theo byte
Vd:
Unsigned char/char ứng với 1byte
Unsigned short/short ứng với 2byte
Unsigned int/int ứng với 4 byte
Double ứng với 8byte.
o TYPE: Quy định kiểu của mỗi chiều, quy ước bằng các ký tự.
I - Biểu diễn kiểu số nguyên có dấu (int8, int16,int32)
U – Biểu diễn kiểu số nguyên không dấu.
F- Biểu diễn kiểu số thực.
o WIDTH : Xác định chiều rộng tập dữ liệu tính theo điểm.
o HEIGHT: Tương tự WIDTH nhưng tính cho chiều dài. Nếu
giá trị bằng 1 thì dữ liệu chưa được tổ chức.
o POINT: chứa giá trị tổng số điểm ảnh.
Phần 2 là DATA chứa dữ liệu của từng điểm, mỗi điểm có thể được mã hóa
theo bin hay ASCII.
Cảm biến Kinect và ứng dụng trong xe tự hành tránh vật cản
Lê Trung Kiên ĐKTĐ 2- K53 18
Ví dụ một file PCD sẽ có dạng như sau:
# .PCD v.7 - Point Cloud Data file format VERSION .7 FIELDS x y z rgb # Chứa tọa độ v{ mầu dạng RGB SIZE 4 4 4 4 # Mỗi th{nh phần tọa đọ xyz v{ mầu lưu bằng 4byte TYPE F F F F # Kiểu dữ liệu mỗi th{nh phần l{ số thực COUNT 1 1 1 1 WIDTH 4 # Độ rộng của dữ liệu l{ 4 HEIGHT 1 # Dữ liệu không được tổ chức. VIEWPOINT 0 0 0 1 0 0 0 POINTS 4 # Tổng số điểm ảnh l{ 4 DATA ascii # Dữ liệu được mã hóa bằng mã ascii 0.93773 0.33763 0 4.2108e+06 # C|c gi| trị của tọa độ v{ mầu của c|c điểm. 0.90805 0.35641 0 4.2108e+06 0.81915 0.32 0 4.2108e+06 0.97192 0.278 0 4.2108e+06
Để ghi và đọc dữ liệu dạng PCD, PCL có cung cấp thư viện IO để xử lý. Chi
tiết thư viện này có thể tham khảo thêm trong phần help.
Cảm biến Kinect và ứng dụng trong xe tự hành tránh vật cản
Lê Trung Kiên ĐKTĐ 2- K53 19
3. PHÁT HIỆN VẬT CẢN BẰNG KINECT
Quá trình xử lý dữ liệu:
Voxel grid làm giảm mật độ số điểm xuống; tập hợp các điểm quá gần nhau sẽ
chỉ cần một điểm đại diện. Ta chọn giá trị mật độ phù hợp mà vẫn đảm bảo quan sát
rõ hình dạng vật thể. Mật độ ta chọn ở đây là 3 centimet theo ba chiều X, Y và Z.
Plannar segmentation sẽ tách các point cloud có cấu trúc phẳng, sau đó tách
ra point cloud có tổng số điểm lớn nhất, bằng giải thuật RANSAC (RANdom
SAmple Consensus).
Euclidean cluster extraction làm công việc tách các point cloud có mặt trên
nền nhà, tập hợp các điểm gần nhau sẽ được nhóm lại thành một point cloud hay
cluster, mỗi cluster đại diện một vật thể.
Dữ liệu sau khi nhận về từ Kinect sẽ được lọc qua bộ lọc Voxel Grid để giảm
mật độ điểm ảnh nhằm tang tốc độ xử lý.
Sau khi lọc dữ liệu, ta sẽ tiến hành phân tích các dữ liệu về vật thể có thể tách ra
thành các nhóm điểm đại diện cho vật thể (Object Clusters). Quá trình này sử dụng
các công cụ Plannar Segmentation, Euclidean Cluster Extraction.
Mỗi nhóm điểm đại diện cho một vật cản và cung cấp thông tin giúp nhận dạng
vật cản, tính toán kích thước, khoảng cách đến vật cản để có thể tính toán tránh vật
cản.
Kết quả sau khi cài đặt:
Cảm biến Kinect và ứng dụng trong xe tự hành tránh vật cản
Lê Trung Kiên ĐKTĐ 2- K53 20
Cảm biến Kinect và ứng dụng trong xe tự hành tránh vật cản