Báo cáo thực tập tốt nghiệp 1 LỜI MỞ ĐẦU Các Robot tự hành được ứng dụng trong đời sống ngày càng nhiều như robot vận chuyển hàng hóa, robot kiểm tra nguy hiểm, robot xe lăn cho người khuyết tật. Robot phục vụ sinh hoạt gia đình… Điểm hạn chế của các robot tự hành hiện tại là tính thiếu linh hoạt và khả năng thích ứng khi làm việc ở những vị trí khác nhau. Từ những lý do đó nảy sinh vấn đề tránh vật cản cho robot tự hành nhằm nâng cao tính linh hoạt cho robot. Hầu hết các robot hiện đại đều có một kiểu tránh vật cản nào đó robot xác định vật cản và dừng lại ở khoảng cách ngắn so với vật cản để tránh va chạm, đến các thuật toán tinh tế hơn, cho phép robot di chuyển theo đường viền quanh vật cản. Đề tài “Xe tự hành tránh vật cản” nhằm góp phần giải quyết các vấn đề trên. Chúng em xin gửi lời cảm ơn chân thành đến cô GS.TS Phan Xuân Minh đã giúp đỡ và giới thiệu chúng em đến thực tập tại trường Cao đẳng nghề công nghệ cao Hà Nội. Trong quá trình thực tập, cô đã tận tình định hướng cũng như cung cấp các kiến thức lý thuyết cho chúng em. Cô luôn động viên giúp chúng em hoàn thành đợt thực tập Chúng em cũng xin gửi lời cảm ơn sâu sắc đến trường Cao đẳng nghề công nghệ cao Hà Nội, thầy Ths Ngô Mạnh Tiến, thầy Nguyễn Văn Dũng đã tạo mọi điều kiện thuận lợi đồng thời hướng dẫn tận cho chúng em trong suốt quá trình thực tập. Nhóm sinh viên Lê Trung Kiên Lê Thế Huy Hoàng Văn Nghĩa
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
Báo cáo thực tập tốt nghiệp
1
LỜI MỞ ĐẦU
Các Robot tự hành được ứng dụng trong đời sống ngày càng nhiều như robot vận
chuyển hàng hóa, robot kiểm tra nguy hiểm, robot xe lăn cho người khuyết tật. Robot
phục vụ sinh hoạt gia đình… Điểm hạn chế của các robot tự hành hiện tại là tính thiếu
linh hoạt và khả năng thích ứng khi làm việc ở những vị trí khác nhau. Từ những lý do đó
nảy sinh vấn đề tránh vật cản cho robot tự hành nhằm nâng cao tính linh hoạt cho robot.
Hầu hết các robot hiện đại đều có một kiểu tránh vật cản nào đó robot xác định vật cản và
dừng lại ở khoảng cách ngắn so với vật cản để tránh va chạm, đến các thuật toán tinh tế
hơn, cho phép robot di chuyển theo đường viền quanh vật cản. Đề tài “Xe tự hành tránh
vật cản” nhằm góp phần giải quyết các vấn đề trên.
Chúng em xin gửi lời cảm ơn chân thành đến cô GS.TS Phan Xuân Minh đã giúp
đỡ và giới thiệu chúng em đến thực tập tại trường Cao đẳng nghề công nghệ cao Hà Nội.
Trong quá trình thực tập, cô đã tận tình định hướng cũng như cung cấp các kiến thức lý
thuyết cho chúng em. Cô luôn động viên giúp chúng em hoàn thành đợt thực tập
Chúng em cũng xin gửi lời cảm ơn sâu sắc đến trường Cao đẳng nghề công nghệ
cao Hà Nội, thầy Ths Ngô Mạnh Tiến, thầy Nguyễn Văn Dũng đã tạo mọi điều kiện
thuận lợi đồng thời hướng dẫn tận cho chúng em trong suốt quá trình thực tập.
Nhóm sinh viên
Lê Trung Kiên
Lê Thế Huy
Hoàng Văn Nghĩa
Báo cáo thực tập tốt nghiệp
2
MỤC LỤC
LỜI MỞ ĐẦU ................................................................................................................................................................... 1
DANH MỤC HÌNH VẼ ...................................................................................................................................................... 4
CHƢƠNG 1 GIỚI THIỆU ĐỀ TÀI ..................................................................................................................................... 5
1.1 Lý do chọn đề tài ............................................................................................................................................. 5
CHƢƠNG 2 TỔNG QUAN HỆ THỐNG ............................................................................................................................. 6
2.1 Giới thiệu về xe tự hành ...................................................................................................................................... 6
2.2 Bài toán tránh vật cản......................................................................................................................................... 8
2.3 Hệ thống xe tự hành tránh vật cản ...................................................................................................................... 9
CHƢƠNG 3 MÔ HÌNH HÓA ĐỐI TƢỢNG XE TỰ HÀNH .................................................................................................. 10
3.1 Mô hình động học xe robot: .............................................................................................................................. 10
3.2 Mô hình động lực học xe robot: ........................................................................................................................ 11
3.3 Đánh giá : ......................................................................................................................................................... 13
4.2 Giới thiệu cảm biến Kinect ............................................................................................................................... 14
4.3 Phát hiện vật cản sử dụng Kinect ..................................................................................................................... 23
CHƢƠNG 5 MẠCH ĐIỀU KHIỂN VÀ TRUYỀN THÔNG ................................................................................................... 27
5.1 i điều hi n MSP43 ....................................................................................................................................... 27
5.3 i điều hi n MSP43 R5 xx-Kit MSP430FR5739 ......................................................................................... 31
5.5 Đánh giá ........................................................................................................................................................... 40
Báo cáo thực tập tốt nghiệp
3
KẾT LUẬN .................................................................................................................................................................... 41
TÀI LIỆU THAM KHẢO ................................................................................................................................................. 42
Báo cáo thực tập tốt nghiệp
4
DANH MỤC HÌNH VẼ
Hình 2-1 Asterisk - Robot nhện di chuyển bằng chân……………………………………6
Hình 2-2 Curiosity- Robot thăm dò sao Hỏa di chuyển bằng bánh………………………7
Hình 2-3 Robot cứu hộ di chuyển bằng xích……………………………………………...7
Hình 2-4 Sơ đồ tổng quan hệ thống……………………………………..………………...9
Hình 3.1 Gắn tọa độ cho xe Robot………………………………………………………..10
Hình 4-2 Cảm biến Kinect………………………………………………………………..15
Hình 4-2 Cấu trúc phần cứng của cảm biến kinect………………………………………16
Hình 4-3 Nguyên lý cảm biến độ sâu…………………………………………………….18
Hình 4-4 Dữ liệu thu được từ cảm biến Kinect…………………………………………..18
Hình 4-5 Bản đồ độ sâu thu được từ Kinect sử dụng OpenNI…………………………...20
Hình 4.6 Ví dụ ứng dụng thư viện PCL trong việc tách các đối tượng trên mặt bàn……22
Hình 4-7 Sơ đồ xử lý phát hiện vật cản sử dụng Kinect…………………………………24
Hình 4-8 Kết quả thu được khi sử dụng qua bộ lọc voxel Grid…………………………26
Hình 4-9 Kết quả phát hiện vật cản sử dụng thư viện PCL……………………………...27
Hình 5.1 Vi điều khiển MSP430………………………………………………………...28
Hình 5.2 Các dòng MSP hiện nay………………………………………………………..29
Hình 5.3 Cấu trúc của MSP430………………………………………………………….30
Hình 5.4 Các module của MSP430………………………………………………………31
Hình 5.5 Cấu trúc Vi điều khiển MSP430FR5739………………………………………34
Hình 5.6 Cấu trúc kit phát triển sử dụng VĐK MSP430FR57xx………………………..35
Hình 5.7 Cấu trúc CC300………………………………………………………………..38
Hình 5.8 Hình ảnh thực tế CC300 TiWi-SL…………………………………………….39
Hình 5.9 Cơ chế liên kết giữa Slave và Host MCU……………………………………..39
Hình 5.10 MSP430FR5739 board+CC3000 TiWi-SL………………………………….40
Báo cáo thực tập tốt nghiệp
5
CHƢƠNG 1 GIỚI THIỆU ĐỀ TÀI
1.1 Lý do chọn đề tài
Theo dự đoán thì sau cuộc cách mạng lớn về internet sẽ là cuộc cách mạng về lĩnh
vực robot. Các Robot được ứng dụng trong đời sống ngày càng nhiều như robot vận
chuyển hàng hóa, robot kiểm tra nguy hiểm, robot xe lăn cho người khuyết tật. Robot
phục vụ sinh hoạt gia đình… Điểm hạn chế của các robot tự hành hiện tại là tính thiếu
linh hoạt và khả năng thích ứng khi làm việc ở những vị trí khác nhau. Từ những lý do đó
nảy sinh vấn đề tránh vật cản cho robot tự hành nhằm nâng cao tính linh hoạt cho robot.
Hầu hết các robot hiện đại đều có một kiểu tránh vật cản nào đó robot xác định vật cản và
dừng lại ở khoảng cách ngắn so với vật cản để tránh va chạm, đến các thuật toán tinh tế
hơn, cho phép robot di chuyển theo đường viền quanh vật cản.
Nhằm từng bước tiếp cận và tạo nền tảng cho quá trình nghiên cứu ứng dụng các
công nghệ vào các sản phẩm phù hợp thực thế, nhóm đồ án chúng em đã chọn đề tài:
“ Điều khiển xe tự hành tránh vật cản”.
1.2 Mục đích
Xây dựng một xe tự hành hoàn chỉnh có khả năng tìm đến vị trí đặt trước và có khả
năng tránh vật cản trong quá trình di chuyển. Điểm mới của xe tự hành là sử dụng cảm
biến Kinect có khả năng khôi phục môi trường phía trước robot dưới dạng 3D từ đó xác
định được các thông số cần thiết cho giải thuật điều khiển robot.
Trong khuôn khổ của đợt thực tập tốt nghiệp tại phòng thí nghiệm robot của trường
Cao đẳng nghề công nghệ cao Hà Nội, nhóm thực tập chúng em dừng lại ở việc tìm hiểu
cấu trúc tổng quan của robot. Xây dựng được mô hình động học, động lực học của robot
đồng thời tìm hiểu các khối phục vụ cho việc điều khiển robot như khối cảm biến Kinect,
các KIT sử dụng chip MSP của TI và các giao thức truyền thông giữa máy tính và KIT.
Báo cáo thực tập tốt nghiệp
6
CHƢƠNG 2 TỔNG QUAN HỆ THỐNG
2.1 Giới thiệu về xe tự hành
Xe tự hành hay robot di động (mobile robots, thường được gọi tắt là mobots) được
định nghĩa là một loại xe robot có khả năng tựdịch chuyển, tự vận động (có thể lập trình
lại được) dưới sự điền khiển tự động để thực hiện thành công công việc được giao.
Theo lý thuyết, môi trường hoạt động của robot tự hành có thể là đất, nước, không khí,
không gian vũ trụ hay sự tổ hợp giữa chúng. Địa hình bề mặt mà robot di chuyển trên đó
có thể bằng phẳng hoặc thay đổi, lồi lõm.
Theo bộ phận thực hiện chuyển động, ta có thểchia robot tựhành làm 2 lớp: chuyển động
bằng chân (legged) và bằng bánh (wheeled).
Hình 2-1 Asterisk - Robot nhện di chuyển bằng chân
Báo cáo thực tập tốt nghiệp
7
Hình 2-2 Curiosity- Robot thăm dò sao Hỏa di chuyển bằng bánh
Loại chuyển động bằng vòng xích (khi cần mô men phát động lớn hay khi cần di
chuyển trên vùng đầm lầy, cát và băng tuyết)
Hình 2-3 Robot cứu hộ di chuyển bằng xích
Báo cáo thực tập tốt nghiệp
8
2.2 Bài toán tránh vật cản
Tìm đường (navigation) là một khoa học dẫn hướng robot tự hành di chuyển trong
không gian làm việc của nó. Trong vấn đề tìm đường, bài toán được quan tâm nhiều nhất
là bài toán tìm đường về đích mà không chạm vào vật cản trên đường đi.
Có 2 loại bài toán tìm đường cho robot:
- Bài toán cục bộ (local): Môi trường làm việc của robot hoàn toàn không biết
trước hoặc chỉ biết một phần. Robot hoàn toàn nhờ vào sự cảm nhận môi trường
trong quá trình di chuyển thông qua cảm biến gắn trên nó để dò đường.
- Bài toán toàn cục (Global):Bản đồ môi trường làm việc của robot hoàn toàn được
biết trước, vấn đề chính phải giải quyết là tìm đường đi cho robot trước khi nó
xuất phát.
Bài toán toàn cục có lợi thế là biết trước đường đi có tới đích hay không, có thể chọn
đường tối ưu trước khi robot khởi hành. Tuy nhiên hạn chế là đòi hỏi nhiều tài nguyên để
tính toán và yêu cầu cao về độ chính xác của bản đồ môi trường làm việc. Việc thay đổi
môi trường ví dụ như có vật cản thay phía trước robot khiến robot không hoạt động đúng
yêu cầu.
Trong trường hợp này, bài toán cục bộ tỏ ra có ưu thế, nó có tính linh hoạt cao như có
thể tránh vẩn cản khi vật đó di chuyển. Đồng thời yêu cầu tài nguyên phục vụ tính toán
thấp hơn. Nhược điểm của bài toán này là robot chỉ cảm nhận môi trường qua cảm biến
gắn cùng vì thế có thể không hoàn thành việc tới đích mặc dù có đường đi hơn nữa không
thể chọn ra được đường đi tối ưu.
Trong báo cáo, chúng em tập trung vào giải quyết bài toán cục bộ với cảm biến sử
dụng là Kinect. Môi trường hoạt động của robot là mặt phẳng giới hạn bởi các bức tường.
Các vật cản xuất hiện ngẫu nhiên. Yêu cầu đặt ra là robot tự động tìm đường về được tới
đích mà không chạm vào vật cản.
Báo cáo thực tập tốt nghiệp
9
2.3 Hệ thống xe tự hành tránh vật cản
Hệ thống tổng quan bao gồm 4bộ phận chính (Hình 2-4)(1) Bộ cảm biến Kinect,
(2) bộ phận chấp hành là các bánh xe có gắn động cơ điện 1 chiều, (3) Laptop,(4) vi điều
khiển và driver điều khiển động cơ.
Các thành phần phối hợp hoạt động như sau: (1) Cảm biến Kinect liên tục thu thập dữ
liệu về hình ảnh, khoảng cách sau đó gửi về (2) Laptop để có thể khôi phục lại không
gian 3D trước robot đồng thời sử dụng các thuật toán thích hợp để phát hiện vật cản cũng
như tìm được các thông số của vật cản để cung cấp cho thuật toán tránh vật cản.Sau khi
các tín hiệu được xử lý thì sẽ tìm ra được quỹ đạo đặt tiếp theo cho robot. Quỹ đạo là đầu
vào cho bộ điều khiển cài đặt trong vi điều khiển và sau đó chuyển thành các tín hiệu
điều khiển động cơ DC. Khi di chuyển Kinect lại thu thập các dữ liệu mới và quá trình
này được lặp lại.
Hình 2-4 Sơ đồ tổng quan hệ thống
Báo cáo thực tập tốt nghiệp
10
CHƢƠNG 3 MÔ HÌNH HÓA ĐỐI TƢỢNG XE TỰ
HÀNH
3.1 Mô hình động học xe robot:
Hình 3.1 Gắn tọa độ cho xe Robot
Xét xe robot trong không gian làm việc. Ta cần sử dụng 3 hệ tọa độ để xác định được
vị trí của xe robot, đối tượng cần bám, các vật cản so với mặt đất, cũng như vị trí tương
đối của xe robot, đối tượng cần bám, các vật cản so với nhau. 3 hệ tọa độ đó là:
- Hệ tọa độ OXY gắn với mặt đất đóng vai trò là hệ gốc, xác định vị trí tuyệt
đối của xe robot,cũng như các đối tượng trên mặt phẳng chuyển động.
- Hệ tọa độ m mCx y gắn với xe robot.
- Hệ tọa độ 'O xy gắn với cảm biến Kinect, có vai trò xác định vị trí tương đối
giữa đối tượng bám, vật cản so với xe robot.
Biến điều khiển là vận tốc 2 bánh xe (tV , pV ), biến được điều khiển chính là tọa độ
của xe (0x ,
0y ). Phương trình động học của xe:
Báo cáo thực tập tốt nghiệp
11
os( ) 0
sin( ) 0w
0 1
x cv
y
(3.1)
Trong đó: v là vận tốc thẳng của xe, w là vận tốc quay của xe. Và có:
2 2
w 2 2
t
p
r rVv
Vr r
D D
(3.2)
.t tV r (3.3)
.p pV r (3.4)
Trong đó, r là bán ính bánh xe, D là hoảng cách giữa 2 bánh xe.
Để đơn giản,trong phạm vi đồ án ta chỉ quan tâm đến 2 chuyển động cơ bản của xe
robot:
- Chuyển động tịnh tiến (w=0, v≠0) :Vt =Vp xe robot chuyển động tiến hoặc lùi.
- Chuyển động quay (w≠0, v =0 ):Vt = -Vp xe robot chuyển động quay quanh trục đi
qua trung điểm 2 bánh xe A.
Kết hợp (3.1) và (3.2), ta được:
os( ) os( )2 2
r rsin( ) sin( )
2 2
2r 2r
D D
t
p
r rc c
xV
yV
(3.5)
3.2 Mô hình động lực học xe robot:
Xe Robot thuộc lớp đối tượng “mechanical nonholonomic systems”, theo Euler-
Lagrange có phương trình dạng :
Báo cáo thực tập tốt nghiệp
12
( ). ( , ). ( ) ( ). ( ).TM q q C q q q G q B q J q (3.6)
Trong đó:
- ( )M q là ma trận đối xứng, xác định dương
- ( , )C q q là ma trận hướng tâm và lực coriolis
- ( )G q là ma trận vector lực quán tính
- ( )B q là vector biến đổi tín hiệu vào
- là ma trận tín hiệu vào
- ( )J q là ma trận liên ết
- là ma trận của lực liên ết
Thực tế với đối tượng Robot di động : ( , ) 0C q q , ( ) 0G q , ( ). 0J q q (3.7)
Từ đó, hệ phương trình động lực học của đối tượng Robot di động được viết lại như
sau, với ( , , )Tq x y :
1
2
0 0 os( ) os( ) sin( )1
0 0 sin( ) sin( ) os( )
0 0 D 0
m x c c
m y cr
I D
(3.8)
Đặt: 1 2
1( )l
R ; 1 2
1( )a
R
Trong đó: m là hối lượng của xe, I là momen quán tính của xe
Hệ phương trình (3.8) trở thành :
os( )+ sin( )m
lx cm
os( )- sin( )m
ly cm
(3.9)
a
I
Báo cáo thực tập tốt nghiệp
13
Đạo hàm 2 vế của các phương trình hệ động học (3.1), ta được
.sin( ) . os( )x v v c
. os( ) .sin ( )y v c v (3.10)
w
So sánh các vế của các phương trình (3.9), (3.10):
lvm
(3.11)
aw = I
Bộ điều khiển được thiết kế sẽ thực hiện 2 nhiệm vụ :
- Bám vận tốc đặt trước vc : bộ điều khiển sẽ sử dụng mô hình động lực học của xe
robot.
- Bám quỹ đạo đặt trước qd : bộ điều khiển sẽ sử dụng mô hình động học của xe
robot
3.3 Đánh giá :
- Trong thời gian thực tập, chúng em đã thu được một số kết quả như sau:
Tìm hiểu được cơ bản về lý thuyết xe robot,tìm hiểu,xây dựng được mô
hình động học,mô hình động lực học cho xe robot.
Tìm hiểu được về nguyên lý điều khiển xe robot, bước đầu xây dựng được
cấu trúc hệ thống điều khiển xe robot.
- Trong thời gian hoàn thành đồ án, chúng em sẽ hoàn thiện hệ thống điều khiển, cài
đặt bộ điều khiển với thuật toán “bám mục tiêu + tránh vật cản” chạy thử nghiệm
trên xe robot.
Báo cáo thực tập tốt nghiệp
14
CHƢƠNG 4 CẢM BIẾN KINECT
4.1 Mục đích
Mục đích của việc sử dụng cảm biến Kinect trong đề tài là dựa vào khả năng khôi
phục môi trường trước robot tự hành dưới dạng 3D để phát hiện đồng thời tính toán các
tham số của vật cản như khoảng cách từ robot đến vật cản, kích thước vật cản…
Việc phát hiện vật cản sử dụng Kinect được xem là sự kết hợp giữa xử lý ảnh và
và phương pháp đo đạc khoảng cách bằng sóng hồng ngoại. Kết quả thu về chính xác, ổn
định hơn so với các phương pháp phổ biến như sử dụng cảm biến siêu âm hay sử dụng xử
lý ảnh thông thường.
4.2 Giới thiệu cảm biến Kinect
Hình 4-2 Cảm biến Kinect
Kinect là sản phẩm của Microsoft dựa trên công nghệ camera được phát triển bởi
PrimeSense, những sản phẩm đầu tiên được bán tại Bắc Mỹ vào ngày 4 tháng 11 năm
2010 .
Báo cáo thực tập tốt nghiệp
15
Kinect được coi như là một thiết bị ngoại vi cho Xbox 360, cho phép giao tiếp
với con người thông qua các cử chỉ, đem lại những cảm giác thú vị cho người chơi game
trên Xbox. Khả năng hiểu được cử chỉ con người của Kinect dựa trên hai đặc tính chính
sau: thông tin về độ sâu ảnh (depth map), khả năng phát hiện và bám theo đặc tính cơ
thể người (body skeleton tracking).
Bên cạnh phục vụ cho mục đích chơi game, sản phẩm Kinect còn được dùng vào
mục đích nghiên cứu xử lý ảnh 3D, phát hiện cử chỉ (gesture recognition), bám theo
người (body tracking) và nhiều mục đích khác. Lý do chính cho sự thành công của sản
phẩm Kinect là giá cả khá rẻ (khoảng 140$ trên 1 sản phẩm) cho thiết bị có khả năng
cung cấp các thông tin 3D với chất lượng chấp nhận được.
4.2.1 Cấu trúc phần cứng
Hình 4-2 Cấu trúc phần cứng của cảm biến kinect
Bên trong Kinect bao gồm 1 camera RGB, cảm biến độ sâu , một dãy các microphone và
1 động cơ điều khiển góc nâng.
Camera RGB
Là một camera có 3 kênh dữ liệu có độ phân giải 1280x960. Camera này có khả năng
chụp lại ảnh ảnh mầu.
Báo cáo thực tập tốt nghiệp
16
Cảm biến độ sâu
Độ sâu thu về nhờ sự kết hợp của 2 bộ phận là bộ phát hồng ngoại IR và camera hồng
ngoại đọc các tín hiệu phản hồi về từ đó tính toán ra bản đồ độ sâu.
DãyMicrophone
Dãy Micro bao gồm 4 micro được bố trí dọc theo thân Kinect có khả năng thu lại âm
thanh đồng thời xác định hướng của âm thanh. Dãy Microphone này được dùng trong các
ứng dụng điều khiển bằng giọng nói.
Ngoài ra Kinect còn có 1 cảm biến đo gia tốc để xác định hướng và 1 động cơ dùng để
điều khiển góc ngẩng camera.
Trong số những cảm biến kể trên của Kinect, cảm biến độ sâu có khả năng ứng dụng cao
trong đề tài robot tránh vật cản.
4.2.2 Nguyên lý cảm biến độ sâu
Cặp cảm biến IR camera và IR projector sẽ phối hợp với nhau để tạo ra giá trị độ sâu
bằng công nghệ Light Coding của PrimeSense.
Kĩ thuật Light Coding dùng nguồn sáng hồng ngoại chiếu liên tục kết hợp với một
camera hồng ngoại để tính khoảng cách. Việc tính toán này được thực hiện bằng chip
PS1080 Soc của PrimeSen.
Projector sẽ chiếu một chùm sáng hồng ngoại, tạo nên những đốm sáng ở không gian
phía trước Kinect, tập hợp đốm sáng được phát ra này là cố định. Những đốm sáng
này được tạo ra nhờ một nguồn sáng truyền qua lưới nhiễu xạ (diffraction gratings). Tập
hợp các đốm sáng này được IR camera chụp lại, thông qua giải thuật đặc biệt được tích
hợp trong PS1080 SoC cho ra bản đồ độ sâu. Bản chất của giải thuật này là các phép
toán hình học dựa trên quan hệ giữa hai cảm biến IR camera và Projector.
Báo cáo thực tập tốt nghiệp
17
Hình 4-3 Nguyên lý cảm biến độ sâu
4.1.3 Các dữ liệu đo từ cảm biến
Hình 4-4 Dữ liệu thu đƣợc từ cảm biến Kinect
Báo cáo thực tập tốt nghiệp
18
Các cảm biến của Kinect được điều khiển đồng thời thu thập và xử lý dữ liệu thông
qua chip PS1080 có tần số 12MHz, sau đó được lưu trữ vào bộ nhớ Flash. Các dữ liệu
này có thể truyền vào máy tính thông qua cổng USB 2.0.
Các tín hiệu thu thập bao gồm dữ liệu về độ sâu, màu sắc và âm thanh trong đó tín
hiệu về độ sâu là dữ liệu quan trọng có nhiều dụng.
Sở dĩ dữ liệu về chiều độ sâu có tầm quan trọng như vậy bởi nó giúp việc nhận dạng
các vật thể đơn giản hơn nhiều so với xử lý ảnh thông thường. Các thuật toán xử lý ảnh
thông thường dựa vào sự tương đồng về mầu sắc, tuy nhiên, có thể những vật có mầu sắc
tương tự nhau nhưng không cùng một vật thể hoặc các phần của cùng một đối tượng
nhưng có mầu khác nhau,do vậy gây khó khăn trong quá trình nhận dạng. Trong khi đó,
với thông tin về độ sâu, các vật thể được phân biệt với nhau thông qua vị trí. Những
điểm có khoảng cách gần nhau có xu hướng cùng một đối tượng mà không phân biệt mầu
sắc. Chỉ khi độ sâu giảm đột ngột như ở cạnh và ở một số phần nhỏ của đối tượng thì khi
đó, hình ảnh trên bản đồ độ sâu mới có sự thay đổi.
Một ưu điểm nữa của bản đồ độ sâu đó là dữ liệu có thể được nén cao hơn so với ảnh
mầu thông thường do đó thích hợp trong việc truyền dẫn nhanh tín hiệu. Các thuật toán
nhận dạng đối với ảnh độ sâu đơn giản hơn và thậm chí có thể tái tạo lại vật thể 3D (Bộ
thư viện mã nguồn mở hỗ trợ thuật toán trên là PCL).
Từ những phân tích trên ta có thể thấy được những ưu điểm của bản đồ độ sâu và nó
rất thích hợp để ứng dụng trong các đề tài về robot tự hành.
4.2 Các thư viện xử lý ảnh cho Kinect
Hiện nay có nhiều bộ thư viện được viết cho Kinect. Nổi bật trong số đó là 2 bộ
thư viện mã nguồn mở OpenNI và bộ thư viện Kinect SDK của Microsoft.
Trong đồ án này, nhóm sinh viên đã sử dụng thư viện OpenNI . Đây là bộ thư viện
mã nguồn mở, dùng được trên nhiều hệ điều hành khác nhau. Thư viện được xây dựng hỗ
trợ đầy đủ các nhu cầu cơ bản khi sử dụng Kinect trong đồ án xe tự hành tránh vật cản.
Báo cáo thực tập tốt nghiệp
19
Mục đính chính khi sử dụng bộ thư viện OpenNI là thu được bản đồ độ sâu (Depth
Map) mang thông tin về khoảng cách từ các vật thể trong không gian phía trước cảm biến
Kinect.OpenNI cho phép thu bản đồ độ sâu trong giới hạn từ 0.5-5m phía trước Kinect.
Hình 4-5 Bản đồ độ sâu thu đƣợc từ Kinect sử dụng OpenNI
Để phát huy tối đa khả năng của Kinect, nhóm sinh viên kết hợp thêm bộ thư viện
xử lý ảnh 3D là PCL.
PCL là thư viện hỗ trợ xử lý ảnh 3D, được xây dựng với 14 module thực hiện các
thuật toán khác nhau.
- Module PCL_Common: Chứa cấu trúc dữ liệu và phương thức được sử dụng bởi
phần lớn các thư viện trong PCL
- Module Features: 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
- Module PCL_filters : Chứa các kỹ thuật loại bỏ nhiễu.
- 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.
- Module 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).
- Module 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).
Báo cáo thực tập tốt nghiệp
20
- Module 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.
- 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
- 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.
- 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 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…
- 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.
- Module 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.
- Module PCL_surface: 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.
- Module 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.
Báo cáo thực tập tốt nghiệp
21
Hình 4.6 Ví dụ ứng dụng thƣ viện PCL trong việc tách các đối tƣợng trên mặt bàn
Kiểu dữ liệu cơ bản trong PCL là PointCloud.
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.
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)
Báo cáo thực tập tốt nghiệp
22
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 Một cấu trúc chứa thông tin về 3 trục tọa độ X,Y,Z của điểm
cần biểu diễn
- pcl::PointXYZRGB Chứa thông tin vệ tọa độ và mầu sắc dạng RGB của điểm cần
biểu diễn.
- pcl::PointXYZRGBAChứa thông tin vệ tọa độ và mầu sắc dạng RGB và mật độ
của điểm cần biểu diễn.
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.
Báo cáo thực tập tốt nghiệp
23
4.3 Phát hiện vật cản sử dụng Kinect
Sơ đồ xử lý phát hiện vật cản sử dụng Kinect.
Hình 4-7 Sơ đồ xử lý phát hiện vật cản sử dụng Kinect
Khối đầu tiên có nhiệm vụ thu về bản đồ độ sâu từ Kinect. Việc này cần sự hỗ trợ của
OpenNI. Các khối còn lại sử dụng thư viện PCL có nhiệm vụ xử lý dữ liệu thu được để
tách ra thành từng nhóm điểm đại diện cho những đối tượng tương ứng.
Sau đây là hoạt động cụ thể của từng khối.
4.3.1 Thu thập dữ liệu từ Kinect:
Để đọc dữ liệu thu được từ Kinect, chúng ta có thể sử dụng OpenNIGrabber, đây là một
1.2 Nguyên lý các cảm biến độ sâu. ..................................................................................................... 46
1.3 ác dữ liệu đo được từ cảm biến. ........................................................................................................ 48
2. CÁC THƢ VIỆN XỬ LÝ ẢNH .......................................................................................................................... 49
2.1 Các module .................................................................................................................................... 50
2.2.2 Định dạng PCD: ............................................................................................................................ 58
3. PHÁT HIỆN VẬT CẢN BẰNG KINECT ............................................................................................................ 61
Quá trình xử lý dữ liệu: .............................................................................................................................. 61
Kết quả sau khi cài đặt ........................................................................................................................... 61
Báo cáo thực tập tốt nghiệp
44
1.GIỚI THIỆU CƠ BẢN VỀ KINECT
Kinect là sản phẩm của Microsoft dựa trên công nghệ camera được phát triển bởi
PrimeSense, những sản phẩm đầu tiên được bán tại Bắc Mỹ vào ngày 4 tháng 11 năm
2010 .
Báo cáo thực tập tốt nghiệp
45
Kinect được coi như là một thiết bị ngoại vi cho Xbox 360, cho phép giao tiếp
với con người thông qua các cử chỉ, đem lại những cảm giác thú vị cho người chơi game
trên Xbox. Khả năng hiểu được cử chỉ con người của Kinect dựa trên hai đặc tính chính
sau: thông tin về độ sâu ảnh (depth map), khả năng phát hiện và bám theo đặc tính cơ
thể người (body skeleton tracking).
Bên cạnh phục vụ cho mục đích chơi game, sản phẩm Kinect còn được dùng vào
mục đích nghiên cứu xử lý ảnh 3D, phát hiện cử chỉ (gesture recognition), bám theo
người (body tracking) và nhiều mục đích khác. Lý do chính cho sự thành công của sản
phẩm Kinect là giá cả khá rẻ (khoảng 140$ trên 1 sản phẩm) cho thiết bị có khả năng
cung cấp các thông tin 3D với chất lượng chấp nhận được.
1.1 cấu trúc phần cứng.
Bên trong Kinect bao gồm 1 camera RGB, cảm biến độ sâu , một dãy các microphone và
1 động cơ điều khiển góc nâng.
1.1.1 Camera RGB
Là một camera có 3 kênh dữ liệu có độ phân giải 1280x960. Camera này có khả
năng chụp lại ảnh ảnh mầu.
Báo cáo thực tập tốt nghiệp
46
1.1.2 Cảm biến độ sâu
Độ sâu thu về nhờ sự kết hợp của 2 bộ phận là bộ phát hồng ngoại IR và camera
hồng ngoại đọc các tín hiệu phản hồi về từ đó tính toán ra bản đồ độ sâu.
1.1.3 DãyMicrophone
Dãy Micro bao gồm 4 micro được bố trí dọc theo thân Kinect có khả năng thu lại
âm thanh đồng thời xác định hướng của âm thanh. Dãy Microphone này được
dùng trong các ứng dụng điều khiển bằng giọng nói.
Ngoài ra Kinect còn có 1 cảm biến đo gia tốc để xác định hướng và 1 động cơ
dùng để điều khiển góc ngẩng camera.
Trong số những cảm biến kể trên của Kinect, cảm biến độ sâu có khả năng ứng
dụng cao trong đề tài robot tránh mục tiêu.
1.2 Nguyên lý các cảm biến độ sâu.
Cặp cảm biến IR camera và IR projector sẽ phối hợp với nhau để tạo ra giá trị độ sâu
bằng công nghệ Light Coding của PrimeSense [2 .
Báo cáo thực tập tốt nghiệp
47
Kĩ thuật Light Coding dùng nguồn sáng hồng ngoại chiếu liên tục kết hợp với một
camera hồng ngoại để tính khoảng cách. Việc tính toán này được thực hiện bằng chip
PS1080 Soc của PrimeSen.
Projector sẽ chiếu một chùm sáng hồng ngoại, tạo nên những đốm sáng ở không
gian phía trước Kinect, tập hợp đốm sáng được phát ra này là cố định. Những đốm
sáng này được tạo ra nhờ một nguồn sáng truyền qua lưới nhiễu xạ (diffraction
gratings). Tập hợp các đốm sáng này được IR camera chụp lại, thông qua giải thuật
đặc biệt được tích hợp trong PS1080 SoC cho ra bản đồ độ sâu. Bản chất của giải
thuật này là các phép toán hình học dựa trên quan hệ giữa hai cảm biến IR camera
và Projector.
Báo cáo thực tập tốt nghiệp
48
1.3 Các dữ liệu đo đƣợc từ cảm biến.
Các cảm biến của Kinect được điều khiển đồng thời thu thập và xử lý dữ liệu thông
qua chip PS1080 có tần số 12MHz, sau đó được lưu trữ vào bộ nhớ Flash. Các dữ liệu
này có thể truyền vào máy tính thông qua cổng USB 2.0.
Các tín hiệu thu thập bao gồm dữ liệu về độ sâu, màu sắc và âm thanh trong đó tín
hiệu về độ sâu là dữ liệu quan trọng có nhiều dụng.
Sở dĩ dữ liệu về chiều độ sâu có tầm quan trọng như vậy bởi nó giúp việc nhận dạng
các vật thể đơn giản hơn nhiều so với xử lý ảnh thông thường. Các thuật toán xử lý ảnh
thông thường dựa vào sự tương đồng về mầu sắc, tuy nhiên, có thể những vật có mầu sắc
tương tự nhau nhưng không cùng một vật thể hoặc các phần của cùng một đối tượng
nhưng có mầu khác nhau,do vậy gây khó khăn trong quá trình nhận dạng. Trong khi đó,
với thông tin về độ sâu, các vật thể được phân biệt với nhau thông qua vị trí. Những
điểm có khoảng cách gần nhau có xu hướng cùng một đối tượng mà không phân biệt mầu
sắc. Chỉ khi độ sâu giảm đột ngột như ở cạnh và ở một số phần nhỏ của đối tượng thì khi
đó, hình ảnh trên bản đồ độ sâu mới có sự thay đổi.
Báo cáo thực tập tốt nghiệp
49
Một ưu điểm nữa của bản đồ độ sâu đó là dữ liệu có thể được nén cao hơn so với ảnh
mầu thông thường do đó thích hợp trong việc truyền dẫn nhanh tín hiệu.
Các thuật toán nhận dạng đối với ảnh độ sâu đơn giản hơn và thậm chí có thể tái tạo
lại vật thể 3D (Bộ thư viện mã nguồn mở hỗ trợ thuật toán trên là PCL).
Từ những phân tích trên ta có thể thấy được những ưu điểm của bản đồ độ sâu và nó
rất thích hợp để ứng dụng trong các đề tài về robot tự hành.
2. CÁC THƢ VIỆN XỬ LÝ ẢNH
Hiện nay có nhiều bộ thư viện được viết cho Kinect. Nổi bật trong số đó là 2 bộ thư viện
mã nguồn mở OpenNI và bộ thư viện Kinect SDK của Microsoft.
Trong đồ án này, nhóm sinh viên đã sử dụng thư viện OpenNI . Đây là bộ thư viện
mã nguồn mở, dùng được trên nhiều hệ điều hành khác nhau. Thư viện được xây dựng hỗ
trợ đầy đủ các nhu cầu cơ bản khi sử dụng Kinect trong đồ án xe tự hành tránh vật cản.
Để phát huy tối đa khả năng của Kinect, nhóm sinh viên kết hợp thêm bộ thư viện
xử lý ảnh 3D là PCL.
PCL là thư viện hỗ trợ xử lý ảnh 3D, được xây dựng với nhiều module thực hiện
các thuật toán như: Lọc (filtering), Khôi phục bề mặt (Surface reconstruction), phân vùng
(segmentation), ớc lượng đặc tính vật (Feature estimation ).
Thư viện đi k m để hỗ trợ được chia nhỏ và có thể biên dịch độc lập. Các thư viện
này gồm có :
Eigen: Hỗ trợ các phép toán tuyến tính, dùng vào hầu hết các tính toán toán học
của PCL.
FLANN: (Fast Library for Approximate Nearest Neighbors) Tìm kiếm nhanh các
điểm lân cận trong không gian 3D.
Boost: Giúp chia sẻ con trỏ trên tất cả các module và thuật toán trong PCL để
tránh sao chép và trùng dữ liệu đã lấy về trong hệ thống.
Báo cáo thực tập tốt nghiệp
50
VTK: (Visualization Toolkit) Hỗ trợ nhiều platform trong việc thu về dữ liệu 3D,
hỗ trợ hiển thị, ước lượng thể tích vật thể.
CminPack : Thư viện mở giúp giải quyết phép toán tuyến tính và không tuyến
tính.
2.1 Các module:
Thư viện có tất cả 14 module bao gồm:
2.1.1 PCL_Common:
- Chứa cấu trúc dữ liệu và phương thức được sử dụng bởi phần lớn các
thư viện trong PCL
- Cấu trúc dữ liệu cốt lõi là các class pointClound, các loại dữ liệu biểu
- 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.
Báo cáo thực tập tốt nghiệp
51
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).
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.
Báo cáo thực tập tốt nghiệp
52
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 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
Báo cáo thực tập tốt nghiệp
53
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 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…
Báo cáo thực tập tốt nghiệp
54
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:
Báo cáo thực tập tốt nghiệp
55
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.
Báo cáo thực tập tốt nghiệp
56
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ố.
Báo cáo thực tập tốt nghiệp
57
- 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.
Báo cáo thực tập tốt nghiệp
58
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 CD:
Đị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.
Báo cáo thực tập tốt nghiệp
59
- 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.
Ví dụ một file PCD sẽ có dạng như sau:
Báo cáo thực tập tốt nghiệp
60
# .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.
Báo cáo thực tập tốt nghiệp
61
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ụ
1.2 Nguyên lý các cảm biến độ sâu. ..................................................................................................... 46
1.3 ác dữ liệu đo được từ cảm biến. ........................................................................................................ 48
2. CÁC THƢ VIỆN XỬ LÝ ẢNH .......................................................................................................................... 49
2.1 Các module .................................................................................................................................... 50
2.2.2 Định dạng PCD: ............................................................................................................................ 58
3. PHÁT HIỆN VẬT CẢN BẰNG KINECT ............................................................................................................ 61
Quá trình xử lý dữ liệu: .............................................................................................................................. 61
Kết quả sau khi cài đặt ........................................................................................................................... 61
Báo cáo thực tập tốt nghiệp
64
1.GIỚI THIỆU CƠ BẢN VỀ KINECT
Kinect là sản phẩm của Microsoft dựa trên công nghệ camera được phát triển bởi
PrimeSense, những sản phẩm đầu tiên được bán tại Bắc Mỹ vào ngày 4 tháng 11 năm
2010 .
Báo cáo thực tập tốt nghiệp
65
Kinect được coi như là một thiết bị ngoại vi cho Xbox 360, cho phép giao tiếp
với con người thông qua các cử chỉ, đem lại những cảm giác thú vị cho người chơi game
trên Xbox. Khả năng hiểu được cử chỉ con người của Kinect dựa trên hai đặc tính chính
sau: thông tin về độ sâu ảnh (depth map), khả năng phát hiện và bám theo đặc tính cơ
thể người (body skeleton tracking).
Bên cạnh phục vụ cho mục đích chơi game, sản phẩm Kinect còn được dùng vào
mục đích nghiên cứu xử lý ảnh 3D, phát hiện cử chỉ (gesture recognition), bám theo
người (body tracking) và nhiều mục đích khác. Lý do chính cho sự thành công của sản
phẩm Kinect là giá cả khá rẻ (khoảng 140$ trên 1 sản phẩm) cho thiết bị có khả năng
cung cấp các thông tin 3D với chất lượng chấp nhận được.
1.3 cấu trúc phần cứng.
Bên trong Kinect bao gồm 1 camera RGB, cảm biến độ sâu , một dãy các microphone và
1 động cơ điều khiển góc nâng.
1.3.1 Camera RGB
Là một camera có 3 kênh dữ liệu có độ phân giải 1280x960. Camera này có khả
năng chụp lại ảnh ảnh mầu.
Báo cáo thực tập tốt nghiệp
66
1.3.2 Cảm biến độ sâu
Độ sâu thu về nhờ sự kết hợp của 2 bộ phận là bộ phát hồng ngoại IR và camera
hồng ngoại đọc các tín hiệu phản hồi về từ đó tính toán ra bản đồ độ sâu.
1.3.3 DãyMicrophone
Dãy Micro bao gồm 4 micro được bố trí dọc theo thân Kinect có khả năng thu lại
âm thanh đồng thời xác định hướng của âm thanh. Dãy Microphone này được
dùng trong các ứng dụng điều khiển bằng giọng nói.
Ngoài ra Kinect còn có 1 cảm biến đo gia tốc để xác định hướng và 1 động cơ
dùng để điều khiển góc ngẩng camera.
Trong số những cảm biến kể trên của Kinect, cảm biến độ sâu có khả năng ứng
dụng cao trong đề tài robot tránh mục tiêu.
1.4 Nguyên lý các cảm biến độ sâu.
Cặp cảm biến IR camera và IR projector sẽ phối hợp với nhau để tạo ra giá trị độ sâu
bằng công nghệ Light Coding của PrimeSense [2 .
Báo cáo thực tập tốt nghiệp
67
Kĩ thuật Light Coding dùng nguồn sáng hồng ngoại chiếu liên tục kết hợp với một
camera hồng ngoại để tính khoảng cách. Việc tính toán này được thực hiện bằng chip
PS1080 Soc của PrimeSen.
Projector sẽ chiếu một chùm sáng hồng ngoại, tạo nên những đốm sáng ở không
gian phía trước Kinect, tập hợp đốm sáng được phát ra này là cố định. Những đốm
sáng này được tạo ra nhờ một nguồn sáng truyền qua lưới nhiễu xạ (diffraction
gratings). Tập hợp các đốm sáng này được IR camera chụp lại, thông qua giải thuật
đặc biệt được tích hợp trong PS1080 SoC cho ra bản đồ độ sâu. Bản chất của giải
thuật này là các phép toán hình học dựa trên quan hệ giữa hai cảm biến IR camera
và Projector.
Báo cáo thực tập tốt nghiệp
68
1.3 Các dữ liệu đo đƣợc từ cảm biến.
Các cảm biến của Kinect được điều khiển đồng thời thu thập và xử lý dữ liệu thông
qua chip PS1080 có tần số 12MHz, sau đó được lưu trữ vào bộ nhớ Flash. Các dữ liệu
này có thể truyền vào máy tính thông qua cổng USB 2.0.
Các tín hiệu thu thập bao gồm dữ liệu về độ sâu, màu sắc và âm thanh trong đó tín
hiệu về độ sâu là dữ liệu quan trọng có nhiều dụng.
Sở dĩ dữ liệu về chiều độ sâu có tầm quan trọng như vậy bởi nó giúp việc nhận dạng
các vật thể đơn giản hơn nhiều so với xử lý ảnh thông thường. Các thuật toán xử lý ảnh
thông thường dựa vào sự tương đồng về mầu sắc, tuy nhiên, có thể những vật có mầu sắc
tương tự nhau nhưng không cùng một vật thể hoặc các phần của cùng một đối tượng
nhưng có mầu khác nhau,do vậy gây khó khăn trong quá trình nhận dạng. Trong khi đó,
với thông tin về độ sâu, các vật thể được phân biệt với nhau thông qua vị trí. Những
điểm có khoảng cách gần nhau có xu hướng cùng một đối tượng mà không phân biệt mầu
sắc. Chỉ khi độ sâu giảm đột ngột như ở cạnh và ở một số phần nhỏ của đối tượng thì khi
đó, hình ảnh trên bản đồ độ sâu mới có sự thay đổi.
Báo cáo thực tập tốt nghiệp
69
Một ưu điểm nữa của bản đồ độ sâu đó là dữ liệu có thể được nén cao hơn so với ảnh
mầu thông thường do đó thích hợp trong việc truyền dẫn nhanh tín hiệu.
Các thuật toán nhận dạng đối với ảnh độ sâu đơn giản hơn và thậm chí có thể tái tạo
lại vật thể 3D (Bộ thư viện mã nguồn mở hỗ trợ thuật toán trên là PCL).
Từ những phân tích trên ta có thể thấy được những ưu điểm của bản đồ độ sâu và nó
rất thích hợp để ứng dụng trong các đề tài về robot tự hành.
2. CÁC THƢ VIỆN XỬ LÝ ẢNH
Hiện nay có nhiều bộ thư viện được viết cho Kinect. Nổi bật trong số đó là 2 bộ thư viện
mã nguồn mở OpenNI và bộ thư viện Kinect SDK của Microsoft.
Trong đồ án này, nhóm sinh viên đã sử dụng thư viện OpenNI . Đây là bộ thư viện
mã nguồn mở, dùng được trên nhiều hệ điều hành khác nhau. Thư viện được xây dựng hỗ
trợ đầy đủ các nhu cầu cơ bản khi sử dụng Kinect trong đồ án xe tự hành tránh vật cản.
Để phát huy tối đa khả năng của Kinect, nhóm sinh viên kết hợp thêm bộ thư viện
xử lý ảnh 3D là PCL.
PCL là thư viện hỗ trợ xử lý ảnh 3D, được xây dựng với nhiều module thực hiện
các thuật toán như: Lọc (filtering), Khôi phục bề mặt (Surface reconstruction), phân vùng
(segmentation), ớc lượng đặc tính vật (Feature estimation ).
Thư viện đi k m để hỗ trợ được chia nhỏ và có thể biên dịch độc lập. Các thư viện
này gồm có :
Eigen: Hỗ trợ các phép toán tuyến tính, dùng vào hầu hết các tính toán toán học
của PCL.
FLANN: (Fast Library for Approximate Nearest Neighbors) Tìm kiếm nhanh các
điểm lân cận trong không gian 3D.
Boost: Giúp chia sẻ con trỏ trên tất cả các module và thuật toán trong PCL để
tránh sao chép và trùng dữ liệu đã lấy về trong hệ thống.
Báo cáo thực tập tốt nghiệp
70
VTK: (Visualization Toolkit) Hỗ trợ nhiều platform trong việc thu về dữ liệu 3D,
hỗ trợ hiển thị, ước lượng thể tích vật thể.
CminPack : Thư viện mở giúp giải quyết phép toán tuyến tính và không tuyến
tính.
2.2 Các module:
Thư viện có tất cả 14 module bao gồm:
2.1.1 PCL_Common:
- Chứa cấu trúc dữ liệu và phương thức được sử dụng bởi phần lớn các
thư viện trong PCL
- Cấu trúc dữ liệu cốt lõi là các class pointClound, các loại dữ liệu biểu
- 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.
Báo cáo thực tập tốt nghiệp
71
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).
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.
Báo cáo thực tập tốt nghiệp
72
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 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
Báo cáo thực tập tốt nghiệp
73
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 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…
Báo cáo thực tập tốt nghiệp
74
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:
Báo cáo thực tập tốt nghiệp
75
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.
Báo cáo thực tập tốt nghiệp
76
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ố.
Báo cáo thực tập tốt nghiệp
77
- 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.
Báo cáo thực tập tốt nghiệp
78
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 CD:
Đị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.
Báo cáo thực tập tốt nghiệp
79
- 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.
Ví dụ một file PCD sẽ có dạng như sau:
Báo cáo thực tập tốt nghiệp
80
# .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.
Báo cáo thực tập tốt nghiệp
81
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ụ
1.2 Nguyên lý các cảm biến độ sâu. ..................................................................................................... 46
1.3 ác dữ liệu đo được từ cảm biến. ........................................................................................................ 48
2. CÁC THƢ VIỆN XỬ LÝ ẢNH .......................................................................................................................... 49
2.1 Các module .................................................................................................................................... 50
2.2.2 Định dạng PCD: ............................................................................................................................ 58
3. PHÁT HIỆN VẬT CẢN BẰNG KINECT ............................................................................................................ 61
Quá trình xử lý dữ liệu: .............................................................................................................................. 61
Kết quả sau khi cài đặt ........................................................................................................................... 61
Báo cáo thực tập tốt nghiệp
84
1.GIỚI THIỆU CƠ BẢN VỀ KINECT
Kinect là sản phẩm của Microsoft dựa trên công nghệ camera được phát triển bởi
PrimeSense, những sản phẩm đầu tiên được bán tại Bắc Mỹ vào ngày 4 tháng 11 năm
2010 .
Báo cáo thực tập tốt nghiệp
85
Kinect được coi như là một thiết bị ngoại vi cho Xbox 360, cho phép giao tiếp
với con người thông qua các cử chỉ, đem lại những cảm giác thú vị cho người chơi game
trên Xbox. Khả năng hiểu được cử chỉ con người của Kinect dựa trên hai đặc tính chính
sau: thông tin về độ sâu ảnh (depth map), khả năng phát hiện và bám theo đặc tính cơ
thể người (body skeleton tracking).
Bên cạnh phục vụ cho mục đích chơi game, sản phẩm Kinect còn được dùng vào
mục đích nghiên cứu xử lý ảnh 3D, phát hiện cử chỉ (gesture recognition), bám theo
người (body tracking) và nhiều mục đích khác. Lý do chính cho sự thành công của sản
phẩm Kinect là giá cả khá rẻ (khoảng 140$ trên 1 sản phẩm) cho thiết bị có khả năng
cung cấp các thông tin 3D với chất lượng chấp nhận được.
1.5 cấu trúc phần cứng.
Bên trong Kinect bao gồm 1 camera RGB, cảm biến độ sâu , một dãy các microphone và
1 động cơ điều khiển góc nâng.
1.5.1 Camera RGB
Là một camera có 3 kênh dữ liệu có độ phân giải 1280x960. Camera này có khả
năng chụp lại ảnh ảnh mầu.
Báo cáo thực tập tốt nghiệp
86
1.5.2 Cảm biến độ sâu
Độ sâu thu về nhờ sự kết hợp của 2 bộ phận là bộ phát hồng ngoại IR và camera
hồng ngoại đọc các tín hiệu phản hồi về từ đó tính toán ra bản đồ độ sâu.
1.5.3 DãyMicrophone
Dãy Micro bao gồm 4 micro được bố trí dọc theo thân Kinect có khả năng thu lại
âm thanh đồng thời xác định hướng của âm thanh. Dãy Microphone này được
dùng trong các ứng dụng điều khiển bằng giọng nói.
Ngoài ra Kinect còn có 1 cảm biến đo gia tốc để xác định hướng và 1 động cơ
dùng để điều khiển góc ngẩng camera.
Trong số những cảm biến kể trên của Kinect, cảm biến độ sâu có khả năng ứng
dụng cao trong đề tài robot tránh mục tiêu.
1.6 Nguyên lý các cảm biến độ sâu.
Cặp cảm biến IR camera và IR projector sẽ phối hợp với nhau để tạo ra giá trị độ sâu
bằng công nghệ Light Coding của PrimeSense [2 .
Báo cáo thực tập tốt nghiệp
87
Kĩ thuật Light Coding dùng nguồn sáng hồng ngoại chiếu liên tục kết hợp với một
camera hồng ngoại để tính khoảng cách. Việc tính toán này được thực hiện bằng chip
PS1080 Soc của PrimeSen.
Projector sẽ chiếu một chùm sáng hồng ngoại, tạo nên những đốm sáng ở không
gian phía trước Kinect, tập hợp đốm sáng được phát ra này là cố định. Những đốm
sáng này được tạo ra nhờ một nguồn sáng truyền qua lưới nhiễu xạ (diffraction
gratings). Tập hợp các đốm sáng này được IR camera chụp lại, thông qua giải thuật
đặc biệt được tích hợp trong PS1080 SoC cho ra bản đồ độ sâu. Bản chất của giải
thuật này là các phép toán hình học dựa trên quan hệ giữa hai cảm biến IR camera
và Projector.
Báo cáo thực tập tốt nghiệp
88
1.3 Các dữ liệu đo đƣợc từ cảm biến.
Các cảm biến của Kinect được điều khiển đồng thời thu thập và xử lý dữ liệu thông
qua chip PS1080 có tần số 12MHz, sau đó được lưu trữ vào bộ nhớ Flash. Các dữ liệu
này có thể truyền vào máy tính thông qua cổng USB 2.0.
Các tín hiệu thu thập bao gồm dữ liệu về độ sâu, màu sắc và âm thanh trong đó tín
hiệu về độ sâu là dữ liệu quan trọng có nhiều dụng.
Sở dĩ dữ liệu về chiều độ sâu có tầm quan trọng như vậy bởi nó giúp việc nhận dạng
các vật thể đơn giản hơn nhiều so với xử lý ảnh thông thường. Các thuật toán xử lý ảnh
thông thường dựa vào sự tương đồng về mầu sắc, tuy nhiên, có thể những vật có mầu sắc
tương tự nhau nhưng không cùng một vật thể hoặc các phần của cùng một đối tượng
nhưng có mầu khác nhau,do vậy gây khó khăn trong quá trình nhận dạng. Trong khi đó,
với thông tin về độ sâu, các vật thể được phân biệt với nhau thông qua vị trí. Những
điểm có khoảng cách gần nhau có xu hướng cùng một đối tượng mà không phân biệt mầu
sắc. Chỉ khi độ sâu giảm đột ngột như ở cạnh và ở một số phần nhỏ của đối tượng thì khi
đó, hình ảnh trên bản đồ độ sâu mới có sự thay đổi.
Báo cáo thực tập tốt nghiệp
89
Một ưu điểm nữa của bản đồ độ sâu đó là dữ liệu có thể được nén cao hơn so với ảnh
mầu thông thường do đó thích hợp trong việc truyền dẫn nhanh tín hiệu.
Các thuật toán nhận dạng đối với ảnh độ sâu đơn giản hơn và thậm chí có thể tái tạo
lại vật thể 3D (Bộ thư viện mã nguồn mở hỗ trợ thuật toán trên là PCL).
Từ những phân tích trên ta có thể thấy được những ưu điểm của bản đồ độ sâu và nó
rất thích hợp để ứng dụng trong các đề tài về robot tự hành.
2. CÁC THƢ VIỆN XỬ LÝ ẢNH
Hiện nay có nhiều bộ thư viện được viết cho Kinect. Nổi bật trong số đó là 2 bộ thư viện
mã nguồn mở OpenNI và bộ thư viện Kinect SDK của Microsoft.
Trong đồ án này, nhóm sinh viên đã sử dụng thư viện OpenNI . Đây là bộ thư viện
mã nguồn mở, dùng được trên nhiều hệ điều hành khác nhau. Thư viện được xây dựng hỗ
trợ đầy đủ các nhu cầu cơ bản khi sử dụng Kinect trong đồ án xe tự hành tránh vật cản.
Để phát huy tối đa khả năng của Kinect, nhóm sinh viên kết hợp thêm bộ thư viện
xử lý ảnh 3D là PCL.
PCL là thư viện hỗ trợ xử lý ảnh 3D, được xây dựng với nhiều module thực hiện
các thuật toán như: Lọc (filtering), Khôi phục bề mặt (Surface reconstruction), phân vùng
(segmentation), ớc lượng đặc tính vật (Feature estimation ).
Thư viện đi k m để hỗ trợ được chia nhỏ và có thể biên dịch độc lập. Các thư viện
này gồm có :
Eigen: Hỗ trợ các phép toán tuyến tính, dùng vào hầu hết các tính toán toán học
của PCL.
FLANN: (Fast Library for Approximate Nearest Neighbors) Tìm kiếm nhanh các
điểm lân cận trong không gian 3D.
Boost: Giúp chia sẻ con trỏ trên tất cả các module và thuật toán trong PCL để
tránh sao chép và trùng dữ liệu đã lấy về trong hệ thống.
Báo cáo thực tập tốt nghiệp
90
VTK: (Visualization Toolkit) Hỗ trợ nhiều platform trong việc thu về dữ liệu 3D,
hỗ trợ hiển thị, ước lượng thể tích vật thể.
CminPack : Thư viện mở giúp giải quyết phép toán tuyến tính và không tuyến
tính.
2.3 Các module:
Thư viện có tất cả 14 module bao gồm:
2.1.1 PCL_Common:
- Chứa cấu trúc dữ liệu và phương thức được sử dụng bởi phần lớn các
thư viện trong PCL
- Cấu trúc dữ liệu cốt lõi là các class pointClound, các loại dữ liệu biểu
- 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.
Báo cáo thực tập tốt nghiệp
91
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).
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.
Báo cáo thực tập tốt nghiệp
92
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 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
Báo cáo thực tập tốt nghiệp
93
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 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…
Báo cáo thực tập tốt nghiệp
94
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:
Báo cáo thực tập tốt nghiệp
95
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.
Báo cáo thực tập tốt nghiệp
96
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ố.
Báo cáo thực tập tốt nghiệp
97
- 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.
Báo cáo thực tập tốt nghiệp
98
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 CD:
Đị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.
Báo cáo thực tập tốt nghiệp
99
- 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.
Ví dụ một file PCD sẽ có dạng như sau:
Báo cáo thực tập tốt nghiệp
100
# .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.
Báo cáo thực tập tốt nghiệp
101
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ụ
1.2 Nguyên lý các cảm biến độ sâu. ..................................................................................................... 46
1.3 ác dữ liệu đo được từ cảm biến. ........................................................................................................ 48
2. CÁC THƢ VIỆN XỬ LÝ ẢNH .......................................................................................................................... 49
2.1 Các module .................................................................................................................................... 50
2.2.2 Định dạng PCD: ............................................................................................................................ 58
3. PHÁT HIỆN VẬT CẢN BẰNG KINECT ............................................................................................................ 61
Quá trình xử lý dữ liệu: .............................................................................................................................. 61
Kết quả sau khi cài đặt ........................................................................................................................... 61
Báo cáo thực tập tốt nghiệp
104
1.GIỚI THIỆU CƠ BẢN VỀ KINECT
Kinect là sản phẩm của Microsoft dựa trên công nghệ camera được phát triển bởi
PrimeSense, những sản phẩm đầu tiên được bán tại Bắc Mỹ vào ngày 4 tháng 11 năm
2010 .
Báo cáo thực tập tốt nghiệp
105
Kinect được coi như là một thiết bị ngoại vi cho Xbox 360, cho phép giao tiếp
với con người thông qua các cử chỉ, đem lại những cảm giác thú vị cho người chơi game
trên Xbox. Khả năng hiểu được cử chỉ con người của Kinect dựa trên hai đặc tính chính
sau: thông tin về độ sâu ảnh (depth map), khả năng phát hiện và bám theo đặc tính cơ
thể người (body skeleton tracking).
Bên cạnh phục vụ cho mục đích chơi game, sản phẩm Kinect còn được dùng vào
mục đích nghiên cứu xử lý ảnh 3D, phát hiện cử chỉ (gesture recognition), bám theo
người (body tracking) và nhiều mục đích khác. Lý do chính cho sự thành công của sản
phẩm Kinect là giá cả khá rẻ (khoảng 140$ trên 1 sản phẩm) cho thiết bị có khả năng
cung cấp các thông tin 3D với chất lượng chấp nhận được.
1.7 cấu trúc phần cứng.
Bên trong Kinect bao gồm 1 camera RGB, cảm biến độ sâu , một dãy các microphone và
1 động cơ điều khiển góc nâng.
1.7.1 Camera RGB
Là một camera có 3 kênh dữ liệu có độ phân giải 1280x960. Camera này có khả
năng chụp lại ảnh ảnh mầu.
Báo cáo thực tập tốt nghiệp
106
1.7.2 Cảm biến độ sâu
Độ sâu thu về nhờ sự kết hợp của 2 bộ phận là bộ phát hồng ngoại IR và camera
hồng ngoại đọc các tín hiệu phản hồi về từ đó tính toán ra bản đồ độ sâu.
1.7.3 DãyMicrophone
Dãy Micro bao gồm 4 micro được bố trí dọc theo thân Kinect có khả năng thu lại
âm thanh đồng thời xác định hướng của âm thanh. Dãy Microphone này được
dùng trong các ứng dụng điều khiển bằng giọng nói.
Ngoài ra Kinect còn có 1 cảm biến đo gia tốc để xác định hướng và 1 động cơ
dùng để điều khiển góc ngẩng camera.
Trong số những cảm biến kể trên của Kinect, cảm biến độ sâu có khả năng ứng
dụng cao trong đề tài robot tránh mục tiêu.
1.8 Nguyên lý các cảm biến độ sâu.
Cặp cảm biến IR camera và IR projector sẽ phối hợp với nhau để tạo ra giá trị độ sâu
bằng công nghệ Light Coding của PrimeSense [2 .
Báo cáo thực tập tốt nghiệp
107
Kĩ thuật Light Coding dùng nguồn sáng hồng ngoại chiếu liên tục kết hợp với một
camera hồng ngoại để tính khoảng cách. Việc tính toán này được thực hiện bằng chip
PS1080 Soc của PrimeSen.
Projector sẽ chiếu một chùm sáng hồng ngoại, tạo nên những đốm sáng ở không
gian phía trước Kinect, tập hợp đốm sáng được phát ra này là cố định. Những đốm
sáng này được tạo ra nhờ một nguồn sáng truyền qua lưới nhiễu xạ (diffraction
gratings). Tập hợp các đốm sáng này được IR camera chụp lại, thông qua giải thuật
đặc biệt được tích hợp trong PS1080 SoC cho ra bản đồ độ sâu. Bản chất của giải
thuật này là các phép toán hình học dựa trên quan hệ giữa hai cảm biến IR camera
và Projector.
Báo cáo thực tập tốt nghiệp
108
1.3 Các dữ liệu đo đƣợc từ cảm biến.
Các cảm biến của Kinect được điều khiển đồng thời thu thập và xử lý dữ liệu thông
qua chip PS1080 có tần số 12MHz, sau đó được lưu trữ vào bộ nhớ Flash. Các dữ liệu
này có thể truyền vào máy tính thông qua cổng USB 2.0.
Các tín hiệu thu thập bao gồm dữ liệu về độ sâu, màu sắc và âm thanh trong đó tín
hiệu về độ sâu là dữ liệu quan trọng có nhiều dụng.
Sở dĩ dữ liệu về chiều độ sâu có tầm quan trọng như vậy bởi nó giúp việc nhận dạng
các vật thể đơn giản hơn nhiều so với xử lý ảnh thông thường. Các thuật toán xử lý ảnh
thông thường dựa vào sự tương đồng về mầu sắc, tuy nhiên, có thể những vật có mầu sắc
tương tự nhau nhưng không cùng một vật thể hoặc các phần của cùng một đối tượng
nhưng có mầu khác nhau,do vậy gây khó khăn trong quá trình nhận dạng. Trong khi đó,
với thông tin về độ sâu, các vật thể được phân biệt với nhau thông qua vị trí. Những
điểm có khoảng cách gần nhau có xu hướng cùng một đối tượng mà không phân biệt mầu
sắc. Chỉ khi độ sâu giảm đột ngột như ở cạnh và ở một số phần nhỏ của đối tượng thì khi
đó, hình ảnh trên bản đồ độ sâu mới có sự thay đổi.
Báo cáo thực tập tốt nghiệp
109
Một ưu điểm nữa của bản đồ độ sâu đó là dữ liệu có thể được nén cao hơn so với ảnh
mầu thông thường do đó thích hợp trong việc truyền dẫn nhanh tín hiệu.
Các thuật toán nhận dạng đối với ảnh độ sâu đơn giản hơn và thậm chí có thể tái tạo
lại vật thể 3D (Bộ thư viện mã nguồn mở hỗ trợ thuật toán trên là PCL).
Từ những phân tích trên ta có thể thấy được những ưu điểm của bản đồ độ sâu và nó
rất thích hợp để ứng dụng trong các đề tài về robot tự hành.
2. CÁC THƢ VIỆN XỬ LÝ ẢNH
Hiện nay có nhiều bộ thư viện được viết cho Kinect. Nổi bật trong số đó là 2 bộ thư viện
mã nguồn mở OpenNI và bộ thư viện Kinect SDK của Microsoft.
Trong đồ án này, nhóm sinh viên đã sử dụng thư viện OpenNI . Đây là bộ thư viện
mã nguồn mở, dùng được trên nhiều hệ điều hành khác nhau. Thư viện được xây dựng hỗ
trợ đầy đủ các nhu cầu cơ bản khi sử dụng Kinect trong đồ án xe tự hành tránh vật cản.
Để phát huy tối đa khả năng của Kinect, nhóm sinh viên kết hợp thêm bộ thư viện
xử lý ảnh 3D là PCL.
PCL là thư viện hỗ trợ xử lý ảnh 3D, được xây dựng với nhiều module thực hiện
các thuật toán như: Lọc (filtering), Khôi phục bề mặt (Surface reconstruction), phân vùng
(segmentation), ớc lượng đặc tính vật (Feature estimation ).
Thư viện đi k m để hỗ trợ được chia nhỏ và có thể biên dịch độc lập. Các thư viện
này gồm có :
Eigen: Hỗ trợ các phép toán tuyến tính, dùng vào hầu hết các tính toán toán học
của PCL.
FLANN: (Fast Library for Approximate Nearest Neighbors) Tìm kiếm nhanh các
điểm lân cận trong không gian 3D.
Boost: Giúp chia sẻ con trỏ trên tất cả các module và thuật toán trong PCL để
tránh sao chép và trùng dữ liệu đã lấy về trong hệ thống.
Báo cáo thực tập tốt nghiệp
110
VTK: (Visualization Toolkit) Hỗ trợ nhiều platform trong việc thu về dữ liệu 3D,
hỗ trợ hiển thị, ước lượng thể tích vật thể.
CminPack : Thư viện mở giúp giải quyết phép toán tuyến tính và không tuyến
tính.
2.4 Các module:
Thư viện có tất cả 14 module bao gồm:
2.1.1 PCL_Common:
- Chứa cấu trúc dữ liệu và phương thức được sử dụng bởi phần lớn các
thư viện trong PCL
- Cấu trúc dữ liệu cốt lõi là các class pointClound, các loại dữ liệu biểu
- 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.
Báo cáo thực tập tốt nghiệp
111
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).
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.
Báo cáo thực tập tốt nghiệp
112
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 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
Báo cáo thực tập tốt nghiệp
113
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 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…
Báo cáo thực tập tốt nghiệp
114
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:
Báo cáo thực tập tốt nghiệp
115
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.
Báo cáo thực tập tốt nghiệp
116
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ố.
Báo cáo thực tập tốt nghiệp
117
- 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.
Báo cáo thực tập tốt nghiệp
118
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 CD:
Đị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.
Báo cáo thực tập tốt nghiệp
119
- 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.
Ví dụ một file PCD sẽ có dạng như sau:
Báo cáo thực tập tốt nghiệp
120
# .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.
Báo cáo thực tập tốt nghiệp
121
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ụ
1.2 Nguyên lý các cảm biến độ sâu. ..................................................................................................... 46
1.3 ác dữ liệu đo được từ cảm biến. ........................................................................................................ 48
2. CÁC THƢ VIỆN XỬ LÝ ẢNH .......................................................................................................................... 49
2.1 Các module .................................................................................................................................... 50
2.2.2 Định dạng PCD: ............................................................................................................................ 58
3. PHÁT HIỆN VẬT CẢN BẰNG KINECT ............................................................................................................ 61
Quá trình xử lý dữ liệu: .............................................................................................................................. 61
Kết quả sau khi cài đặt ........................................................................................................................... 61
Báo cáo thực tập tốt nghiệp
124
1.GIỚI THIỆU CƠ BẢN VỀ KINECT
Kinect là sản phẩm của Microsoft dựa trên công nghệ camera được phát triển bởi
PrimeSense, những sản phẩm đầu tiên được bán tại Bắc Mỹ vào ngày 4 tháng 11 năm
2010 .
Báo cáo thực tập tốt nghiệp
125
Kinect được coi như là một thiết bị ngoại vi cho Xbox 360, cho phép giao tiếp
với con người thông qua các cử chỉ, đem lại những cảm giác thú vị cho người chơi game
trên Xbox. Khả năng hiểu được cử chỉ con người của Kinect dựa trên hai đặc tính chính
sau: thông tin về độ sâu ảnh (depth map), khả năng phát hiện và bám theo đặc tính cơ
thể người (body skeleton tracking).
Bên cạnh phục vụ cho mục đích chơi game, sản phẩm Kinect còn được dùng vào
mục đích nghiên cứu xử lý ảnh 3D, phát hiện cử chỉ (gesture recognition), bám theo
người (body tracking) và nhiều mục đích khác. Lý do chính cho sự thành công của sản
phẩm Kinect là giá cả khá rẻ (khoảng 140$ trên 1 sản phẩm) cho thiết bị có khả năng
cung cấp các thông tin 3D với chất lượng chấp nhận được.
1.9 cấu trúc phần cứng.
Bên trong Kinect bao gồm 1 camera RGB, cảm biến độ sâu , một dãy các microphone và
1 động cơ điều khiển góc nâng.
1.9.1 Camera RGB
Là một camera có 3 kênh dữ liệu có độ phân giải 1280x960. Camera này có khả
năng chụp lại ảnh ảnh mầu.
Báo cáo thực tập tốt nghiệp
126
1.9.2 Cảm biến độ sâu
Độ sâu thu về nhờ sự kết hợp của 2 bộ phận là bộ phát hồng ngoại IR và camera
hồng ngoại đọc các tín hiệu phản hồi về từ đó tính toán ra bản đồ độ sâu.
1.9.3 DãyMicrophone
Dãy Micro bao gồm 4 micro được bố trí dọc theo thân Kinect có khả năng thu lại
âm thanh đồng thời xác định hướng của âm thanh. Dãy Microphone này được
dùng trong các ứng dụng điều khiển bằng giọng nói.
Ngoài ra Kinect còn có 1 cảm biến đo gia tốc để xác định hướng và 1 động cơ
dùng để điều khiển góc ngẩng camera.
Trong số những cảm biến kể trên của Kinect, cảm biến độ sâu có khả năng ứng
dụng cao trong đề tài robot tránh mục tiêu.
1.10 Nguyên lý các cảm biến độ sâu.
Cặp cảm biến IR camera và IR projector sẽ phối hợp với nhau để tạo ra giá trị độ sâu
bằng công nghệ Light Coding của PrimeSense [2 .
Báo cáo thực tập tốt nghiệp
127
Kĩ thuật Light Coding dùng nguồn sáng hồng ngoại chiếu liên tục kết hợp với một
camera hồng ngoại để tính khoảng cách. Việc tính toán này được thực hiện bằng chip
PS1080 Soc của PrimeSen.
Projector sẽ chiếu một chùm sáng hồng ngoại, tạo nên những đốm sáng ở không
gian phía trước Kinect, tập hợp đốm sáng được phát ra này là cố định. Những đốm
sáng này được tạo ra nhờ một nguồn sáng truyền qua lưới nhiễu xạ (diffraction
gratings). Tập hợp các đốm sáng này được IR camera chụp lại, thông qua giải thuật
đặc biệt được tích hợp trong PS1080 SoC cho ra bản đồ độ sâu. Bản chất của giải
thuật này là các phép toán hình học dựa trên quan hệ giữa hai cảm biến IR camera
và Projector.
Báo cáo thực tập tốt nghiệp
128
1.3 Các dữ liệu đo đƣợc từ cảm biến.
Các cảm biến của Kinect được điều khiển đồng thời thu thập và xử lý dữ liệu thông
qua chip PS1080 có tần số 12MHz, sau đó được lưu trữ vào bộ nhớ Flash. Các dữ liệu
này có thể truyền vào máy tính thông qua cổng USB 2.0.
Các tín hiệu thu thập bao gồm dữ liệu về độ sâu, màu sắc và âm thanh trong đó tín
hiệu về độ sâu là dữ liệu quan trọng có nhiều dụng.
Sở dĩ dữ liệu về chiều độ sâu có tầm quan trọng như vậy bởi nó giúp việc nhận dạng
các vật thể đơn giản hơn nhiều so với xử lý ảnh thông thường. Các thuật toán xử lý ảnh
thông thường dựa vào sự tương đồng về mầu sắc, tuy nhiên, có thể những vật có mầu sắc
tương tự nhau nhưng không cùng một vật thể hoặc các phần của cùng một đối tượng
nhưng có mầu khác nhau,do vậy gây khó khăn trong quá trình nhận dạng. Trong khi đó,
với thông tin về độ sâu, các vật thể được phân biệt với nhau thông qua vị trí. Những
điểm có khoảng cách gần nhau có xu hướng cùng một đối tượng mà không phân biệt mầu
sắc. Chỉ khi độ sâu giảm đột ngột như ở cạnh và ở một số phần nhỏ của đối tượng thì khi
đó, hình ảnh trên bản đồ độ sâu mới có sự thay đổi.
Báo cáo thực tập tốt nghiệp
129
Một ưu điểm nữa của bản đồ độ sâu đó là dữ liệu có thể được nén cao hơn so với ảnh
mầu thông thường do đó thích hợp trong việc truyền dẫn nhanh tín hiệu.
Các thuật toán nhận dạng đối với ảnh độ sâu đơn giản hơn và thậm chí có thể tái tạo
lại vật thể 3D (Bộ thư viện mã nguồn mở hỗ trợ thuật toán trên là PCL).
Từ những phân tích trên ta có thể thấy được những ưu điểm của bản đồ độ sâu và nó
rất thích hợp để ứng dụng trong các đề tài về robot tự hành.
2. CÁC THƢ VIỆN XỬ LÝ ẢNH
Hiện nay có nhiều bộ thư viện được viết cho Kinect. Nổi bật trong số đó là 2 bộ thư viện
mã nguồn mở OpenNI và bộ thư viện Kinect SDK của Microsoft.
Trong đồ án này, nhóm sinh viên đã sử dụng thư viện OpenNI . Đây là bộ thư viện
mã nguồn mở, dùng được trên nhiều hệ điều hành khác nhau. Thư viện được xây dựng hỗ
trợ đầy đủ các nhu cầu cơ bản khi sử dụng Kinect trong đồ án xe tự hành tránh vật cản.
Để phát huy tối đa khả năng của Kinect, nhóm sinh viên kết hợp thêm bộ thư viện
xử lý ảnh 3D là PCL.
PCL là thư viện hỗ trợ xử lý ảnh 3D, được xây dựng với nhiều module thực hiện
các thuật toán như: Lọc (filtering), Khôi phục bề mặt (Surface reconstruction), phân vùng
(segmentation), ớc lượng đặc tính vật (Feature estimation ).
Thư viện đi k m để hỗ trợ được chia nhỏ và có thể biên dịch độc lập. Các thư viện
này gồm có :
Eigen: Hỗ trợ các phép toán tuyến tính, dùng vào hầu hết các tính toán toán học
của PCL.
FLANN: (Fast Library for Approximate Nearest Neighbors) Tìm kiếm nhanh các
điểm lân cận trong không gian 3D.
Boost: Giúp chia sẻ con trỏ trên tất cả các module và thuật toán trong PCL để
tránh sao chép và trùng dữ liệu đã lấy về trong hệ thống.
Báo cáo thực tập tốt nghiệp
130
VTK: (Visualization Toolkit) Hỗ trợ nhiều platform trong việc thu về dữ liệu 3D,
hỗ trợ hiển thị, ước lượng thể tích vật thể.
CminPack : Thư viện mở giúp giải quyết phép toán tuyến tính và không tuyến
tính.
2.5 Các module:
Thư viện có tất cả 14 module bao gồm:
2.1.1 PCL_Common:
- Chứa cấu trúc dữ liệu và phương thức được sử dụng bởi phần lớn các
thư viện trong PCL
- Cấu trúc dữ liệu cốt lõi là các class pointClound, các loại dữ liệu biểu
- 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.
Báo cáo thực tập tốt nghiệp
131
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).
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.
Báo cáo thực tập tốt nghiệp
132
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 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
Báo cáo thực tập tốt nghiệp
133
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 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…
Báo cáo thực tập tốt nghiệp
134
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:
Báo cáo thực tập tốt nghiệp
135
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.
Báo cáo thực tập tốt nghiệp
136
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ố.
Báo cáo thực tập tốt nghiệp
137
- 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.
Báo cáo thực tập tốt nghiệp
138
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 CD:
Đị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.
Báo cáo thực tập tốt nghiệp
139
- 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.
Ví dụ một file PCD sẽ có dạng như sau:
Báo cáo thực tập tốt nghiệp
140
# .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.
Báo cáo thực tập tốt nghiệp
141
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ụ
1.2 Nguyên lý các cảm biến độ sâu. ..................................................................................................... 46
1.3 ác dữ liệu đo được từ cảm biến. ........................................................................................................ 48
2. CÁC THƢ VIỆN XỬ LÝ ẢNH .......................................................................................................................... 49
2.1 Các module .................................................................................................................................... 50
2.2.2 Định dạng PCD: ............................................................................................................................ 58
3. PHÁT HIỆN VẬT CẢN BẰNG KINECT ............................................................................................................ 61
Quá trình xử lý dữ liệu: .............................................................................................................................. 61
Kết quả sau khi cài đặt ........................................................................................................................... 61
Báo cáo thực tập tốt nghiệp
144
1.GIỚI THIỆU CƠ BẢN VỀ KINECT
Kinect là sản phẩm của Microsoft dựa trên công nghệ camera được phát triển bởi
PrimeSense, những sản phẩm đầu tiên được bán tại Bắc Mỹ vào ngày 4 tháng 11 năm
2010 .
Báo cáo thực tập tốt nghiệp
145
Kinect được coi như là một thiết bị ngoại vi cho Xbox 360, cho phép giao tiếp
với con người thông qua các cử chỉ, đem lại những cảm giác thú vị cho người chơi game
trên Xbox. Khả năng hiểu được cử chỉ con người của Kinect dựa trên hai đặc tính chính
sau: thông tin về độ sâu ảnh (depth map), khả năng phát hiện và bám theo đặc tính cơ
thể người (body skeleton tracking).
Bên cạnh phục vụ cho mục đích chơi game, sản phẩm Kinect còn được dùng vào
mục đích nghiên cứu xử lý ảnh 3D, phát hiện cử chỉ (gesture recognition), bám theo
người (body tracking) và nhiều mục đích khác. Lý do chính cho sự thành công của sản
phẩm Kinect là giá cả khá rẻ (khoảng 140$ trên 1 sản phẩm) cho thiết bị có khả năng
cung cấp các thông tin 3D với chất lượng chấp nhận được.
1.11 cấu trúc phần cứng.
Bên trong Kinect bao gồm 1 camera RGB, cảm biến độ sâu , một dãy các microphone và
1 động cơ điều khiển góc nâng.
1.11.1 Camera RGB
Là một camera có 3 kênh dữ liệu có độ phân giải 1280x960. Camera này có khả
năng chụp lại ảnh ảnh mầu.
Báo cáo thực tập tốt nghiệp
146
1.11.2 Cảm biến độ sâu
Độ sâu thu về nhờ sự kết hợp của 2 bộ phận là bộ phát hồng ngoại IR và camera
hồng ngoại đọc các tín hiệu phản hồi về từ đó tính toán ra bản đồ độ sâu.
1.11.3 DãyMicrophone
Dãy Micro bao gồm 4 micro được bố trí dọc theo thân Kinect có khả năng thu lại
âm thanh đồng thời xác định hướng của âm thanh. Dãy Microphone này được
dùng trong các ứng dụng điều khiển bằng giọng nói.
Ngoài ra Kinect còn có 1 cảm biến đo gia tốc để xác định hướng và 1 động cơ
dùng để điều khiển góc ngẩng camera.
Trong số những cảm biến kể trên của Kinect, cảm biến độ sâu có khả năng ứng
dụng cao trong đề tài robot tránh mục tiêu.
1.12 Nguyên lý các cảm biến độ sâu.
Cặp cảm biến IR camera và IR projector sẽ phối hợp với nhau để tạo ra giá trị độ sâu
bằng công nghệ Light Coding của PrimeSense [2 .
Báo cáo thực tập tốt nghiệp
147
Kĩ thuật Light Coding dùng nguồn sáng hồng ngoại chiếu liên tục kết hợp với một
camera hồng ngoại để tính khoảng cách. Việc tính toán này được thực hiện bằng chip
PS1080 Soc của PrimeSen.
Projector sẽ chiếu một chùm sáng hồng ngoại, tạo nên những đốm sáng ở không
gian phía trước Kinect, tập hợp đốm sáng được phát ra này là cố định. Những đốm
sáng này được tạo ra nhờ một nguồn sáng truyền qua lưới nhiễu xạ (diffraction
gratings). Tập hợp các đốm sáng này được IR camera chụp lại, thông qua giải thuật
đặc biệt được tích hợp trong PS1080 SoC cho ra bản đồ độ sâu. Bản chất của giải
thuật này là các phép toán hình học dựa trên quan hệ giữa hai cảm biến IR camera
và Projector.
Báo cáo thực tập tốt nghiệp
148
1.3 Các dữ liệu đo đƣợc từ cảm biến.
Các cảm biến của Kinect được điều khiển đồng thời thu thập và xử lý dữ liệu thông
qua chip PS1080 có tần số 12MHz, sau đó được lưu trữ vào bộ nhớ Flash. Các dữ liệu
này có thể truyền vào máy tính thông qua cổng USB 2.0.
Các tín hiệu thu thập bao gồm dữ liệu về độ sâu, màu sắc và âm thanh trong đó tín
hiệu về độ sâu là dữ liệu quan trọng có nhiều dụng.
Sở dĩ dữ liệu về chiều độ sâu có tầm quan trọng như vậy bởi nó giúp việc nhận dạng
các vật thể đơn giản hơn nhiều so với xử lý ảnh thông thường. Các thuật toán xử lý ảnh
thông thường dựa vào sự tương đồng về mầu sắc, tuy nhiên, có thể những vật có mầu sắc
tương tự nhau nhưng không cùng một vật thể hoặc các phần của cùng một đối tượng
nhưng có mầu khác nhau,do vậy gây khó khăn trong quá trình nhận dạng. Trong khi đó,
với thông tin về độ sâu, các vật thể được phân biệt với nhau thông qua vị trí. Những
điểm có khoảng cách gần nhau có xu hướng cùng một đối tượng mà không phân biệt mầu
sắc. Chỉ khi độ sâu giảm đột ngột như ở cạnh và ở một số phần nhỏ của đối tượng thì khi
đó, hình ảnh trên bản đồ độ sâu mới có sự thay đổi.
Báo cáo thực tập tốt nghiệp
149
Một ưu điểm nữa của bản đồ độ sâu đó là dữ liệu có thể được nén cao hơn so với ảnh
mầu thông thường do đó thích hợp trong việc truyền dẫn nhanh tín hiệu.
Các thuật toán nhận dạng đối với ảnh độ sâu đơn giản hơn và thậm chí có thể tái tạo
lại vật thể 3D (Bộ thư viện mã nguồn mở hỗ trợ thuật toán trên là PCL).
Từ những phân tích trên ta có thể thấy được những ưu điểm của bản đồ độ sâu và nó
rất thích hợp để ứng dụng trong các đề tài về robot tự hành.
2. CÁC THƢ VIỆN XỬ LÝ ẢNH
Hiện nay có nhiều bộ thư viện được viết cho Kinect. Nổi bật trong số đó là 2 bộ thư viện
mã nguồn mở OpenNI và bộ thư viện Kinect SDK của Microsoft.
Trong đồ án này, nhóm sinh viên đã sử dụng thư viện OpenNI . Đây là bộ thư viện
mã nguồn mở, dùng được trên nhiều hệ điều hành khác nhau. Thư viện được xây dựng hỗ
trợ đầy đủ các nhu cầu cơ bản khi sử dụng Kinect trong đồ án xe tự hành tránh vật cản.
Để phát huy tối đa khả năng của Kinect, nhóm sinh viên kết hợp thêm bộ thư viện
xử lý ảnh 3D là PCL.
PCL là thư viện hỗ trợ xử lý ảnh 3D, được xây dựng với nhiều module thực hiện
các thuật toán như: Lọc (filtering), Khôi phục bề mặt (Surface reconstruction), phân vùng
(segmentation), ớc lượng đặc tính vật (Feature estimation ).
Thư viện đi k m để hỗ trợ được chia nhỏ và có thể biên dịch độc lập. Các thư viện
này gồm có :
Eigen: Hỗ trợ các phép toán tuyến tính, dùng vào hầu hết các tính toán toán học
của PCL.
FLANN: (Fast Library for Approximate Nearest Neighbors) Tìm kiếm nhanh các
điểm lân cận trong không gian 3D.
Boost: Giúp chia sẻ con trỏ trên tất cả các module và thuật toán trong PCL để
tránh sao chép và trùng dữ liệu đã lấy về trong hệ thống.
Báo cáo thực tập tốt nghiệp
150
VTK: (Visualization Toolkit) Hỗ trợ nhiều platform trong việc thu về dữ liệu 3D,
hỗ trợ hiển thị, ước lượng thể tích vật thể.
CminPack : Thư viện mở giúp giải quyết phép toán tuyến tính và không tuyến
tính.
2.6 Các module:
Thư viện có tất cả 14 module bao gồm:
2.1.1 PCL_Common:
- Chứa cấu trúc dữ liệu và phương thức được sử dụng bởi phần lớn các
thư viện trong PCL
- Cấu trúc dữ liệu cốt lõi là các class pointClound, các loại dữ liệu biểu
- 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.
Báo cáo thực tập tốt nghiệp
151
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).
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.
Báo cáo thực tập tốt nghiệp
152
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 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
Báo cáo thực tập tốt nghiệp
153
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 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…
Báo cáo thực tập tốt nghiệp
154
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:
Báo cáo thực tập tốt nghiệp
155
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.
Báo cáo thực tập tốt nghiệp
156
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ố.
Báo cáo thực tập tốt nghiệp
157
- 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.
Báo cáo thực tập tốt nghiệp
158
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 CD:
Đị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.
Báo cáo thực tập tốt nghiệp
159
- 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.
Ví dụ một file PCD sẽ có dạng như sau:
Báo cáo thực tập tốt nghiệp
160
# .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.
Báo cáo thực tập tốt nghiệp
161
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ụ
1.2 Nguyên lý các cảm biến độ sâu. ..................................................................................................... 46
1.3 ác dữ liệu đo được từ cảm biến. ........................................................................................................ 48
2. CÁC THƢ VIỆN XỬ LÝ ẢNH .......................................................................................................................... 49
2.1 Các module .................................................................................................................................... 50
2.2.2 Định dạng PCD: ............................................................................................................................ 58
3. PHÁT HIỆN VẬT CẢN BẰNG KINECT ............................................................................................................ 61
Quá trình xử lý dữ liệu: .............................................................................................................................. 61
Kết quả sau khi cài đặt ........................................................................................................................... 61
Báo cáo thực tập tốt nghiệp
164
1.GIỚI THIỆU CƠ BẢN VỀ KINECT
Kinect là sản phẩm của Microsoft dựa trên công nghệ camera được phát triển bởi
PrimeSense, những sản phẩm đầu tiên được bán tại Bắc Mỹ vào ngày 4 tháng 11 năm
2010 .
Báo cáo thực tập tốt nghiệp
165
Kinect được coi như là một thiết bị ngoại vi cho Xbox 360, cho phép giao tiếp
với con người thông qua các cử chỉ, đem lại những cảm giác thú vị cho người chơi game
trên Xbox. Khả năng hiểu được cử chỉ con người của Kinect dựa trên hai đặc tính chính
sau: thông tin về độ sâu ảnh (depth map), khả năng phát hiện và bám theo đặc tính cơ
thể người (body skeleton tracking).
Bên cạnh phục vụ cho mục đích chơi game, sản phẩm Kinect còn được dùng vào
mục đích nghiên cứu xử lý ảnh 3D, phát hiện cử chỉ (gesture recognition), bám theo
người (body tracking) và nhiều mục đích khác. Lý do chính cho sự thành công của sản
phẩm Kinect là giá cả khá rẻ (khoảng 140$ trên 1 sản phẩm) cho thiết bị có khả năng
cung cấp các thông tin 3D với chất lượng chấp nhận được.
1.13 cấu trúc phần cứng.
Bên trong Kinect bao gồm 1 camera RGB, cảm biến độ sâu , một dãy các microphone và
1 động cơ điều khiển góc nâng.
1.13.1 Camera RGB
Là một camera có 3 kênh dữ liệu có độ phân giải 1280x960. Camera này có khả
năng chụp lại ảnh ảnh mầu.
Báo cáo thực tập tốt nghiệp
166
1.13.2 Cảm biến độ sâu
Độ sâu thu về nhờ sự kết hợp của 2 bộ phận là bộ phát hồng ngoại IR và camera
hồng ngoại đọc các tín hiệu phản hồi về từ đó tính toán ra bản đồ độ sâu.
1.13.3 DãyMicrophone
Dãy Micro bao gồm 4 micro được bố trí dọc theo thân Kinect có khả năng thu lại
âm thanh đồng thời xác định hướng của âm thanh. Dãy Microphone này được
dùng trong các ứng dụng điều khiển bằng giọng nói.
Ngoài ra Kinect còn có 1 cảm biến đo gia tốc để xác định hướng và 1 động cơ
dùng để điều khiển góc ngẩng camera.
Trong số những cảm biến kể trên của Kinect, cảm biến độ sâu có khả năng ứng
dụng cao trong đề tài robot tránh mục tiêu.
1.14 Nguyên lý các cảm biến độ sâu.
Cặp cảm biến IR camera và IR projector sẽ phối hợp với nhau để tạo ra giá trị độ sâu
bằng công nghệ Light Coding của PrimeSense [2 .
Báo cáo thực tập tốt nghiệp
167
Kĩ thuật Light Coding dùng nguồn sáng hồng ngoại chiếu liên tục kết hợp với một
camera hồng ngoại để tính khoảng cách. Việc tính toán này được thực hiện bằng chip
PS1080 Soc của PrimeSen.
Projector sẽ chiếu một chùm sáng hồng ngoại, tạo nên những đốm sáng ở không
gian phía trước Kinect, tập hợp đốm sáng được phát ra này là cố định. Những đốm
sáng này được tạo ra nhờ một nguồn sáng truyền qua lưới nhiễu xạ (diffraction
gratings). Tập hợp các đốm sáng này được IR camera chụp lại, thông qua giải thuật
đặc biệt được tích hợp trong PS1080 SoC cho ra bản đồ độ sâu. Bản chất của giải
thuật này là các phép toán hình học dựa trên quan hệ giữa hai cảm biến IR camera
và Projector.
Báo cáo thực tập tốt nghiệp
168
1.3 Các dữ liệu đo đƣợc từ cảm biến.
Các cảm biến của Kinect được điều khiển đồng thời thu thập và xử lý dữ liệu thông
qua chip PS1080 có tần số 12MHz, sau đó được lưu trữ vào bộ nhớ Flash. Các dữ liệu
này có thể truyền vào máy tính thông qua cổng USB 2.0.
Các tín hiệu thu thập bao gồm dữ liệu về độ sâu, màu sắc và âm thanh trong đó tín
hiệu về độ sâu là dữ liệu quan trọng có nhiều dụng.
Sở dĩ dữ liệu về chiều độ sâu có tầm quan trọng như vậy bởi nó giúp việc nhận dạng
các vật thể đơn giản hơn nhiều so với xử lý ảnh thông thường. Các thuật toán xử lý ảnh
thông thường dựa vào sự tương đồng về mầu sắc, tuy nhiên, có thể những vật có mầu sắc
tương tự nhau nhưng không cùng một vật thể hoặc các phần của cùng một đối tượng
nhưng có mầu khác nhau,do vậy gây khó khăn trong quá trình nhận dạng. Trong khi đó,
với thông tin về độ sâu, các vật thể được phân biệt với nhau thông qua vị trí. Những
điểm có khoảng cách gần nhau có xu hướng cùng một đối tượng mà không phân biệt mầu
sắc. Chỉ khi độ sâu giảm đột ngột như ở cạnh và ở một số phần nhỏ của đối tượng thì khi
đó, hình ảnh trên bản đồ độ sâu mới có sự thay đổi.
Báo cáo thực tập tốt nghiệp
169
Một ưu điểm nữa của bản đồ độ sâu đó là dữ liệu có thể được nén cao hơn so với ảnh
mầu thông thường do đó thích hợp trong việc truyền dẫn nhanh tín hiệu.
Các thuật toán nhận dạng đối với ảnh độ sâu đơn giản hơn và thậm chí có thể tái tạo
lại vật thể 3D (Bộ thư viện mã nguồn mở hỗ trợ thuật toán trên là PCL).
Từ những phân tích trên ta có thể thấy được những ưu điểm của bản đồ độ sâu và nó
rất thích hợp để ứng dụng trong các đề tài về robot tự hành.
2. CÁC THƢ VIỆN XỬ LÝ ẢNH
Hiện nay có nhiều bộ thư viện được viết cho Kinect. Nổi bật trong số đó là 2 bộ thư viện
mã nguồn mở OpenNI và bộ thư viện Kinect SDK của Microsoft.
Trong đồ án này, nhóm sinh viên đã sử dụng thư viện OpenNI . Đây là bộ thư viện
mã nguồn mở, dùng được trên nhiều hệ điều hành khác nhau. Thư viện được xây dựng hỗ
trợ đầy đủ các nhu cầu cơ bản khi sử dụng Kinect trong đồ án xe tự hành tránh vật cản.
Để phát huy tối đa khả năng của Kinect, nhóm sinh viên kết hợp thêm bộ thư viện
xử lý ảnh 3D là PCL.
PCL là thư viện hỗ trợ xử lý ảnh 3D, được xây dựng với nhiều module thực hiện
các thuật toán như: Lọc (filtering), Khôi phục bề mặt (Surface reconstruction), phân vùng
(segmentation), ớc lượng đặc tính vật (Feature estimation ).
Thư viện đi k m để hỗ trợ được chia nhỏ và có thể biên dịch độc lập. Các thư viện
này gồm có :
Eigen: Hỗ trợ các phép toán tuyến tính, dùng vào hầu hết các tính toán toán học
của PCL.
FLANN: (Fast Library for Approximate Nearest Neighbors) Tìm kiếm nhanh các
điểm lân cận trong không gian 3D.
Boost: Giúp chia sẻ con trỏ trên tất cả các module và thuật toán trong PCL để
tránh sao chép và trùng dữ liệu đã lấy về trong hệ thống.
Báo cáo thực tập tốt nghiệp
170
VTK: (Visualization Toolkit) Hỗ trợ nhiều platform trong việc thu về dữ liệu 3D,
hỗ trợ hiển thị, ước lượng thể tích vật thể.
CminPack : Thư viện mở giúp giải quyết phép toán tuyến tính và không tuyến
tính.
2.7 Các module:
Thư viện có tất cả 14 module bao gồm:
2.1.1 PCL_Common:
- Chứa cấu trúc dữ liệu và phương thức được sử dụng bởi phần lớn các
thư viện trong PCL
- Cấu trúc dữ liệu cốt lõi là các class pointClound, các loại dữ liệu biểu
- 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.
Báo cáo thực tập tốt nghiệp
171
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).
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.
Báo cáo thực tập tốt nghiệp
172
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 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
Báo cáo thực tập tốt nghiệp
173
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 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…
Báo cáo thực tập tốt nghiệp
174
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:
Báo cáo thực tập tốt nghiệp
175
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.
Báo cáo thực tập tốt nghiệp
176
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ố.
Báo cáo thực tập tốt nghiệp
177
- 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.
Báo cáo thực tập tốt nghiệp
178
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 CD:
Đị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.
Báo cáo thực tập tốt nghiệp
179
- 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.
Ví dụ một file PCD sẽ có dạng như sau:
Báo cáo thực tập tốt nghiệp
180
# .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.
Báo cáo thực tập tốt nghiệp
181
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ụ