182
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 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

Thực tập tốt nghiệp.pdf

Embed Size (px)

Citation preview

Page 1: Thực tập tốt nghiệp.pdf

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

Page 2: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

2

MỤC LỤC

LỜI MỞ ĐẦU ................................................................................................................................................................... 1

MỤC LỤC ....................................................................................................................................................................... 2

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

1.2 Mục đích .......................................................................................................................................................... 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

CHƢƠNG 4 CẢM BIẾN KINECT .................................................................................................................................... 14

4.1 Mục đích ........................................................................................................................................................... 14

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.4 CC3000 ............................................................................................................................................................ 36

5.5 Đánh giá ........................................................................................................................................................... 40

Page 3: Thực tập tốt nghiệp.pdf

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

Page 4: Thực tập tốt nghiệp.pdf

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

Page 5: Thực tập tốt nghiệp.pdf

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.

Page 6: Thực tập tốt nghiệp.pdf

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

Page 7: Thực tập tốt nghiệp.pdf

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

Page 8: Thực tập tốt nghiệp.pdf

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.

Page 9: Thực tập tốt nghiệp.pdf

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

Page 10: Thực tập tốt nghiệp.pdf

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:

Page 11: Thực tập tốt nghiệp.pdf

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 :

Page 12: Thực tập tốt nghiệp.pdf

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

Page 13: Thực tập tốt nghiệp.pdf

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.

Page 14: Thực tập tốt nghiệp.pdf

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 .

Page 15: Thực tập tốt nghiệp.pdf

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.

Page 16: Thực tập tốt nghiệp.pdf

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.

Page 17: Thực tập tốt nghiệp.pdf

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

Page 18: Thực tập tốt nghiệp.pdf

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.

Page 19: Thực tập tốt nghiệp.pdf

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).

Page 20: Thực tập tốt nghiệp.pdf

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.

Page 21: Thực tập tốt nghiệp.pdf

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)

Page 22: Thực tập tốt nghiệp.pdf

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.

Page 23: Thực tập tốt nghiệp.pdf

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

lớp có sử dụng thư viện OpenNI có sẵn trong PCL.

Các bước thực hiện như sau:

Bước 1: Khai báo

#include <pcl/io/openni_grabber.h>

Bước 2: Tạo một Grabber mới:

pcl::Grabber* interface =new pcl::OpenNIGrabber();

Bước 3: Tạo callback function:

boost::function<void(const pcl::PointCloud<pcl::PointXYZRGBA>::ConstPtr&)> f

boost::bind (&SimpleOpenNIProcessor::cloud_cb_,this, _1);

// cloud_cb_ l{ h{m dùng để xử lý dữ liệu nhận về, ở ví dụ n{y cloub_cb_ để

hiển thị //ra m{n hình.

Ở các lệnh trên, dữ liệu ta thu về từ Kinect có định dạng PointXYZRGBA, có thể

sửa lại lệnh để thu về các loại dữ liệu khác. Cụ thể như sau:

Page 24: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

24

Dữ liệu thu về làđiểm ảnh mầu 3D pointXYZRGB:

void (const boost::shared_ptr<const pcl::pointCloud <pcl::pointXYZRGB>>&)

- Dữ liệu thu về làđiểm ảnh không mầu 3D pointXYZ:

void (const boost::shared_ptr<const pcl::pointCloud <pcl::pointXYZ>>&)

- Dữ liệu thu về làảnh RGB từ camera :

void (const boost::shared_ptr< openNI_wrapper::Image>&)

- Dữ liệu thu về là bản đồđộ sâu:

void (const boost::shared_ptr< openNI_wrapper::DepthImage>&)

Bước 4: Kết nối hàm callback với dữ liệu cần quan tâm và nhận dữ liệu, dừng dữ liệu:

interface->registerCallback(f);

interface->start();

interface->stop();

4.3.2 Voxel grid:

Nhằm tăng tốc độ xử lý, ta có thể đưa dữ liệu qua bộ lọc voxel Grid để giảm số

lượng điểm ảnh và giới hạn vùng lấy dữ liệu phía trước cảm biến.

Tập hợp các điểm gần nhau sẽ chỉ lấy một điểm đại diện.

Các hàm PCL cung cấp cho bộ lọc bao gồm:

- pcl::VoxelGrid<PointType> grid_;Khai báo một bộ lọc VoxtelGrid có tên là grid_,

PointType là các kiểu biểu diễn điểm như PointXYZ, PointXYZRGB…

- grid_.setLeafSize (leaf_size_x, leaf_size_y, leaf_size_z);Chọn mật độ điểm theo các

chiều lần lượt là X,Y,Z. Đơn vị là Met.

- grid_.setFilterFieldName (field_name); : Chiều cần giới hạn ví dụ giới hạn theo chiều

Z

- grid_.setFilterLimits (min_v, max_v);Thiết lập khoảng giới hạn hoảng giới hạn

Thử nghiệm với các thông số double min_v = 0.5, max_v = 1.5; std::string field_name ("z"); double leaf_x = 0.02, leaf_y = 0.02, leaf_z = 0.02;

Page 25: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

25

Ta thu được kết quả sau:

Hình 4-8 Kết quả thu đƣợc khi sử dụng qua bộ lọc voxel Grid

4.3.3 Plannar segmentation

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).

4.3.4 Euclidean cluster extraction

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ể.

Như vậy 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 tăng tốc độ xử lý.Sau khi lọc dữ liệu, ta sẽ tiến hành phân tích các

dữ liệu về vật thể có thể tách ra thành các nhóm điểm đại diện cho vật thể (Object

Clusters). Quá trình này sử dụng các công cụ Plannar Segmentation, Euclidean Cluster

Extraction. Mỗi nhóm điểm đại diện cho một vật cản và cung cấp thông tin giúp nhận

dạng vật cản, tính toán kích thước, khoảng cách đến vật cản để có thể tính toán tránh vật

cản.

Kết hợp các module lại với nhau ta thu được kết quả:

Page 26: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

26

Hình 4-9 Kết quả phát hiện vật cản sử dụng thƣ viện PCL

Trong đó, các điểm ảnh được phân chia thành 3 phần. Nhóm mầu xanh dương đại

diện cho mặt sàn. Nhóm mầu đỏ là nhóm ảnh đại diện cho vật thể gần Kinect nhất. Nhóm

xanh lá cây đại diện cho các vật thể còn lại.

Riêng đối với nhóm gần nhất, ta xấp xỉ vật thể thành một hình hộp chữ nhật bao

quanh với các thông số hoàn toàn xác định. Từ đó có thể coi như nhận dạng vật thể đủ

yêu cầu cung cấp cho thuật toán tránh vật cản.

Page 27: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

27

CHƢƠNG 5 MẠCH ĐIỀU KHIỂN VÀ TRUYỀN

THÔNG

5.1 Vi điều khiển MSP43

5.1.1 Đ c điểm n i bật

MSP430 là họ vi điều khiển cấu trúc RISC 16 bit,được sản xuất bởi công ty Texas

Instrument.

- Công suất tiêu thụ năng lượng siêu thấp và hệ thống xung clock linh hoạt giúp

kéo dài tuổi thọ của pin

- Tích hợp nhiều ngoại vi tính năng cao bao gồm các thiết bị ngoại vi tương tự và kĩ

thuật số hiệu suất cao

- Đa dạng về chủng loại chip,giá thành thấp,phù hợp với sự lựa chọn hầu hết các

loại ứng dụng

- Thời gian tiếp cận và phát triển ứng dụng rất ngắn

Hình 5.1 Vi điều khiển MSP43

Page 28: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

28

5.1.2 Các d ng 43 hiện nay

Hình 5.2 Các dòng MSP hiện nay.

Page 29: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

29

5.1.3 Cấu trúc bên trong

Hình 5.3 Cấu trúc của MSP43

- Cấu trúc RISC CPU 16 bit

- Tốc độ CPU 8 MHz -25 MHz

- 0.5 KB-512 KB Flash

- 128 B-64KB RAM

- 14-113 chân

- Tích hợp :ADC 10 12;các bộ Timer 16 bit; DAC 12;RTC;Watchdog

timer;OpAmp;LCD v.v…

Page 30: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

30

5.1.4 Các mode ho t động

Hình 5.4 Các module của MSP43

Mức tiêu thụ năng lượng giảm dần từ trên xuống dưới.

5.1.5 ng dụng

- Thiết bị đo:đồng hồ điện,đo khí gas,đo lưu lượng

- ng dụng không dây:Các cảm biến từ xa,bộ điều khiển,v.v

- Thiết bị y tế:Đo lượng glucozo trong máu,nhiệt kế,các thiết bị cấy mô

- Cảm biến và an ninh:máy dò khói,máy dò chuyển động

- Các thiết bị điện:ngoại vi PC,chăm sóc cá nhân,điều khiển từ xa, điều khiển động

cơ:các loại động cơ bước,BLDC,DC trong các máy in ,quạt ,ăng ten ,đồ chơi…

5.1.6 Các tr nh phát triển

- Code Composer Studio IDE

- IAR Embedded Workbench

- Mã nguồn mở MSPGCC and MSPDEBUG

Page 31: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

31

5.3 Vi điều khiển MSP43 FR57xx-Kit MSP430FR5739

5.3.1 i điều khiển 43 573

Ngoài các tính năng sẵn có của dòng MSP430,vđk MSP430FR5739 còn tích hợp

đặc điểm nổi bật là bộ nhớ FRAM.

FRAM –Ferroelectric Random Access Memory ,là 1 loại bộ nhớ cố định kết hợp giữa tốc

độ,mức tiêu thụ năng lượng siêu thấp,khả năng chịu đựng,tính linh hoạt của SRAM với

độ tin cậy và ổn định khi kết hợp bộ nhớ chương trình và dữ liệu vào thành 1 không gian

nhớ thống nhất.

Lợi ích của FRAM:

- Năng lượng tiêu thụ siêu thấp:

Chế độ hoạt động bình thường 100 A MHz

Chế độ ghi <250 lần so với ghi Flash

- Tốc độ ghi dữ liệu:nhanh hơn 100 lần so với Flash

Tốc độ Fram max 2000kB s

Tốc độ Flash max 12kB s

- Độ bền khả năng ghi không giới hạn:chịu được 10^15 lần chu trình ghi

Cấu trúc MSP430FR5739

Page 32: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

32

Hình 5.5 Cấu trúc Vi điều khiển MSP43 FR5739

5.3.2 Kit MSP430FR5739: là 1 kit phát triển cho các thiết bị sử dụng VĐK

MSP430FR57xx

Hình 5.6 Cấu trúc kit phát triển sử dụng VĐK MSP43 FR57xx

Page 33: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

33

Các thành phần của kit:

- Tích hợp MSP430FR5739:

16 KB FRAM/1KB FRAM

Kiến trúc RISC 16 bit up tới 8MHz

2 Timer A,3 Timer B

1 khối USCI(UART SPI IrDA I2C)

- Bộ đo gia tốc 3 trục

- Nhiệt kế NTC

- 8 đ n LED

- 2 switch input

- Kết nối:

MSP430F5438

Module Wireless CCxxxxRF

- Hướng dẫn người sử dụng:

Code demo

4 mode để test tính năng FRAM

o Mode 1-Tốc độ ghi max

o Mode 2-Đánh giá tốc độ ghi Flash

o Mode 3-Lấy mẫu nhanh với ghi dùng bộ đo gia tốc

o Mode 4-Lấy mẫu nhanh với ghi dùng nhiệt kế

o Mode 1 và 2 bao gồm các tính năng ULP tắt led và tối ưu năng

lượng

o Tài liệu kit MSP430FR5739: http://www.ti.com/tool/msp-exp430fr5739

5.3.3 ch điều khiển

a. Mạch điều khiển chính: sử dụng kit MSP430FR5739

Page 34: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

34

Hình 5.7 Sơ đồ nguyên lí m ch điều khiển chính

b. Mạch công suất:

-Mạch cầu H: Mạch cầu H là mạch sử dụng để băm xung điện áp một chiều và đảo chiều

quay động cơ. Gồm 4 con MOSFET IRF3205 Q1,Q2,Q3,Q4, có tác dụng đóng cắt để

điều khiển chiều động cơ và mạch kích cho 4 con FET này dùng tụ Boottrap. Ta dùng 2

tín hiệu PWM để điều khiển là PWM 1 và 2.PWM1 điều khiển Q1 và Q3. PWM2 điều

khiển Q2 và Q4.

Muốn kích FET dẫn thì Vgs >0. Đối với Q3 và Q4 thì đơn giản vì chân S đã nối xuống

GND, muốn kích ta chỉ cần cấp xung kích vào chân G là được. Nhưng với Q1 và Q2,

chân S có thế không cố định. Vì vậy muốn kích phải cấp nguồn kích độc lập vào 2 chân

Page 35: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

35

G và S .Kỹ thuật Boottrap giúp ta chỉ cần sử dụng 1 nguồn để kích 4 FET. Và sử dụng IC

IR2184 triệt tiêu trùng dẫn, 2 tụ C4 và C5 đóng vai trò làm 2 nguồn kích cho Q1 và Q2.

Các diode D1 ,D2 là để tránh tụ boottrap xả ngược lại, và phải đáp ứng nhanh kịp với

xung kích . Điện trở R_shunt để hạn dòng cho FET khi xảy ra hiện tượng trùng dẫn.

Hình 5.8 M ch cầu H

-Khối cách ly OPTO: Khối này có công dụng cách ly mạch cầu H với vi điều khiển, vì

khi điều khiển động cơ bằng chân PWM khả năng có những xung không mong muốn dội

từ mạch công suất về vi điều khiển thường làm hư chân PWM. . Khi có xung PWM mức

1 cấp vào opto làm con led phát quang => con trans dẫn và đưa mức 1 ra output. Khi có

xung từ công suất dội về tới trans của opto thì không qua được, ko làm ảnh hưởng tới vi

điều khiển.

Page 36: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

36

Hình 5.9 Khối OPTO

5.4 CC3000

5.4.1 C ng nghệ ifi

- Định nghĩa:Wi-Fi (Wireless Fidelity) hay mạng 802.11 là hệ thống mạng không

dây sử dụng sóng vô tuyến, giống như điện thoại di động, truyền hình và

radio.Wifi có thể được truy cập dưới dạng không có mật khẩu (cho truy cập tự do)

hoặc mã hóa WPA WPA2.

- Có 4 chuẩn Wifi thông dụng hiện nay là 802.11a b g n:

u điểm:giá thành thấp,tầm phủ sóng rộng ,không dễ bị che khuất

Nhược điểm:tốc độ thấp,có thể bị nhiễu bởi các thiết bị gia dụng cùng sử

dụng tần số 2,4GHz

- Hoạt động:Truyền thông qua mạng wifi là truyền thông RF 2 chiều:

Thiết bị adapter không dây chuyển đổi dữ liệu sang tín hiệu RF và phát đi

bằng 1 ăng-ten

Thiết bị router không dây nhận những tín hiệu này và giải mã chúng,nó gửi

thông tin tới Internet thông qua kết nối Ethernet.

Qui trình này cũng hoạt động chiều ngược lại,router nhận thông tin từ Internet,chuyển

chúng thành tín hiệu RF và gửi đến adapter không dây của máy tính

- Sóng Wifi:các sóng Wifi gần giống với các sóng RF dùng cho các thiết bị cầm

tay,điện thoại di động và các thiết bị khác.Nó có thể truyền và nhận sóng

Page 37: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

37

RF,chuyển đổi mã nhị phân sang sóng RF và ngược lại.Tuy nhiên ,sóng WIfi có 1

số khác biệt :

Truyền và phát tín hiệu ở tần số 2.5 GHz hoặc 5 GHz cao hơn tần số sử

dụng cho điện thoại di động ,truyền hình.Tần số cao giúp tín hiệu mang

theo nhiều dữ liệu hơn

Dùng chuẩn 802.11

Chuẩn 802.11b :phát tín hiệu ở tần số 2.4GHz,xử lí đến 11 megabit s ,sử

dụng mã hóa CCK

Chuẩn 802.11g:phát tín hiệu ở tần số 2.4GHz ,tốc độ xử lí đạt 54

megabit s,sử dụng mã hóa OFDM

Chuẩn 802.11a:phát tín hiệu ở tần số 5GHz ,tốc độ xử lí đạt 54

megabit s,sử dụng mã OFDM

Chuẩn 802.11n :phát ở tần số 2.4GHz ,tốc độ xử lí 300 megabit s

- Wifi có thể hoạt động qua lại giữa các tần số khác nhau 1 cách nhanh chóng,giúp

giảm thiểu sự nhiễu sóng,cho phép nhiều thiết bị kết nối không dây cùng lúc.

- ng dụng chính:

Truy cập Internet

Truyền hình ảnh ,âm thanh không dây giữa các thiết bị gia đình như

TV,đầu phát HD

Điều khiển từ xa qua kết nối Wifi

v.v….

5.4.2 T ng quan về CC3

SimpleLink CC3000 được cung cấp như là 1 module nhằm giảm thời gian phát

triển,chi phí sản xuất,tiết kiệm kích thước board.Ngoài ra nó được cung cấp là 1 nền tảng

hoàn chỉnh gồm các driver,ứng dụng mẫu v.v..

Page 38: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

38

CC3000 là 1 bộ xử lí mạng không dây độc lập giúp đơn giản hóa việc kết nối Internet

dùng công nghệ Wifi.Nó giúp giảm các phần mềm của MCU,thích hợp cho các ứng dụng

nhúng sử dụng MCU low-cost/low-power.

Hình 5.10 Cấu trúc CC3

Các tính năng chính:

- Bộ xử lí mạng không dây

Chuẩn IEEE 802.11 b g

Giao thức IPv4 TCP/IP

- Truyền phát RF:

Công suất TX:+18.0 dBm ở 11 Mbps,CCK

Độ nhạy RX:-88dBm,8%PER,11 Mbps

- Hoạt động với MCU chi phí thấp với bộ nhớ nhỏ gọn:kích thước code nhỏ cần cho

MCU

- Kích thước nhỏ:16.3 mmx 13.5 mm x 2 mm

- Môi trường làm việc:-200C-70

0C

Page 39: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

39

- Cấu hình wifi đơn giản dùng smartphone,PC hoặc may tính bảng

CC3000 TiWi-SL:đây là 1 module hỗ trợ chuẩn Wifi 802.11b g.Module này đóng vai trò

là Slave giao tiếp với 1 Host MCU thông qua SPI nhờ 1 ăng-ten trên board,thường dùng

trong các ứng dụng liên kết với kit MSP430FR5739

Hình 5.11 Hình ảnh thực tế CC3 TiWi-SL

Hình 5.12 Cơ chế liên kết giữa Slave và Host MCU

Page 40: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

40

Hình 5.13 MSP430FR5739 board+CC3000 TiWi-SL

5.5 Đánh giá

-Em đã tìm hiểu và lập trình các ví dụ đơn giản sử dụng chip MSP430FR5739,thực hành

trên kit MSP430FR5739,tìm hiểu về CC3000 ,thiết kế mạch điều khiển và mạch công

suất

-Vấn đề chưa làm được: cài đặt thuật toán điều khiển,truyền thông giữa máy tính và

kit,cách truyền phát Wifi giữa kit MSP430FR5739 tới máy tính thông qua CC3000

-Hướng tiếp tục :thiết kế phần mạch công suất để điều khiển động cơ,cài đặt thuật toán

điều khiển,kết nối được phát Wifi

Page 41: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

41

KẾT LUẬN

Qua quá trình thực tập tại trường,chúng em đã hoàn thành những công việc sau:

- Tìm hiểu kiến thức về robot,xây dựng phương trình động học và động lực học.

- Tìm hiểu các khối liên quan đến robot :cảm biến,vi điều khiển

Tuy nhiên các công việc trên mới chỉ dừng ở bước tìm hiểu và mô phỏng,chưa thi

công thực tế và cài đặt thuật toán điều khiển

Các công việc chưa hoàn thành và dự kiến hoàn thành trong thời gian tới phục vụ

cho đồ án tốt nghiệp:

- Thi công phần cứng mạch điều khiển.

- Cài đặt các thuật toán điều khiển và thuật toán tránh vật cản.

- Xây dựng được truyền thông qua wifi

Do hạn chế về mặt kinh nghiệm thực tiễn,khả năng bản than,thời gian thực hiện,nên còn

rất nhiều thiếu sót ,những phương án chưa tốt và cần sự tranh luận góp ý để phát triển

Chúng em xin cảm ơn thầy giáo Ngô Mạnh Tiến và thầy giáo Nguyễn Văn Dũng đã

hướng dẫn ,tạo mọi điều kiện cho chúng em trong đợt thực tập.

Page 42: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

42

TÀI LIỆU THAM KHẢO

[1] R. Fierro and F. L. Lewis, Control of a Nonholonomic Mobile Robot:Backstepping

Kinematicsinto Dynamics.University of Texas, 1995.

[2 Nguyễn Doãn Phước ,Phan uân Minh,Hán Thành Trung,Lý thuyết điều hi n phi

tuyến,NXB Khoa học kĩ thuật,

[3 Nguyễn Thiện Phúc,Robot ông Nghiệp,NXB Khoa học kĩ thuật,2006

[4]http://www.ti.com/

[5]http://www.microsoft.com/en-us/kinectforwindows/

[6]http://www.microsoft.com/en-us/kinectforwindows/

[7]http://processors.wiki.ti.com/index.php/CC3000

Page 43: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

43

MỤC LỤC

1.GIỚI THIỆU CƠ BẢN VỀ KINECT ................................................................................................................... 44

1.1 cấu trúc phần cứng. ........................................................................................................................ 45

1.1.1 Camera RGB ......................................................................................................................... 45

1.1.2 Cảm biến độ sâu .................................................................................................................... 46

1.1.3 DãyMicrophone ..................................................................................................................... 46

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.1.1 PCL_Common: ............................................................................................................................. 50

2.1.2 Module Features: ........................................................................................................................... 50

2.1.3 Module Filters: .............................................................................................................................. 50

2.1.4 Module Geometry: ........................................................................................................................ 51

2.1.5 Module IO: .................................................................................................................................... 51

2.1.6 PCL_Kdtree: ................................................................................................................................. 51

2.1.7: PCL_Keypoint ............................................................................................................................. 52

2.1.8 PCL_Octree: .................................................................................................................................. 52

2.1.9 Module registrantion (PCL_registration): ..................................................................................... 53

2.1.10 Module PCL_sample_consensus: ............................................................................................... 53

2.1.11 PCL_Search ................................................................................................................................ 54

2.1.12 PCL_Segmentation ..................................................................................................................... 54

2.1.13 PCL_surface ................................................................................................................................ 54

2.1.14: PCL_visualization ...................................................................................................................... 56

2.2. ấu trúc dữ liệu cơ bản của PCL ........................................................................................................ 57

2.2.1 PointCloud: ................................................................................................................................... 57

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

Page 44: Thực tập tốt nghiệp.pdf

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 .

Page 45: Thực tập tốt nghiệp.pdf

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.

Page 46: Thực tập tốt nghiệp.pdf

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 .

Page 47: Thực tập tốt nghiệp.pdf

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.

Page 48: Thực tập tốt nghiệp.pdf

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.

Page 49: Thực tập tốt nghiệp.pdf

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.

Page 50: Thực tập tốt nghiệp.pdf

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

diễn điểm, bề mặt, giá trị mầu, mô tả tính năng…

VD: PCL::PointXYZ; PCL::PointXY; PCL::PointXYZRGB;

2.1.2 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

- 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.

Page 51: Thực tập tốt nghiệp.pdf

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.

Page 52: Thực tập tốt nghiệp.pdf

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

Page 53: Thực tập tốt nghiệp.pdf

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…

Page 54: Thực tập tốt nghiệp.pdf

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:

Page 55: Thực tập tốt nghiệp.pdf

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.

Page 56: Thực tập tốt nghiệp.pdf

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ố.

Page 57: Thực tập tốt nghiệp.pdf

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.

Page 58: Thực tập tốt nghiệp.pdf

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.

Page 59: Thực tập tốt nghiệp.pdf

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:

Page 60: Thực tập tốt nghiệp.pdf

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.

Page 61: Thực tập tốt nghiệp.pdf

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ụ

Plannar Segmentation, Euclidean Cluster Extraction.

Mỗi nhóm điểm đại diện cho một vật cản và cung cấp thông tin giúp nhận dạng vật

cản, tính toán kích thước, khoảng cách đến vật cản để có thể tính toán tránh vật cản.

Kết quả sau khi cài đ t:

Page 62: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

62

MỤC LỤC

Page 63: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

63

1.GIỚI THIỆU CƠ BẢN VỀ KINECT ................................................................................................................... 44

1.1 cấu trúc phần cứng. ........................................................................................................................ 45

1.1.1 Camera RGB ......................................................................................................................... 45

1.1.2 Cảm biến độ sâu .................................................................................................................... 46

1.1.3 DãyMicrophone ..................................................................................................................... 46

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.1.1 PCL_Common: ............................................................................................................................. 50

2.1.2 Module Features: ........................................................................................................................... 50

2.1.3 Module Filters: .............................................................................................................................. 50

2.1.4 Module Geometry: ........................................................................................................................ 51

2.1.5 Module IO: .................................................................................................................................... 51

2.1.6 PCL_Kdtree: ................................................................................................................................. 51

2.1.7: PCL_Keypoint ............................................................................................................................. 52

2.1.8 PCL_Octree: .................................................................................................................................. 52

2.1.9 Module registrantion (PCL_registration): ..................................................................................... 53

2.1.10 Module PCL_sample_consensus: ............................................................................................... 53

2.1.11 PCL_Search ................................................................................................................................ 54

2.1.12 PCL_Segmentation ..................................................................................................................... 54

2.1.13 PCL_surface ................................................................................................................................ 54

2.1.14: PCL_visualization ...................................................................................................................... 56

2.2. ấu trúc dữ liệu cơ bản của P L ........................................................................................................ 57

2.2.1 PointCloud: ................................................................................................................................... 57

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

Page 64: Thực tập tốt nghiệp.pdf

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 .

Page 65: Thực tập tốt nghiệp.pdf

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.

Page 66: Thực tập tốt nghiệp.pdf

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 .

Page 67: Thực tập tốt nghiệp.pdf

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.

Page 68: Thực tập tốt nghiệp.pdf

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.

Page 69: Thực tập tốt nghiệp.pdf

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.

Page 70: Thực tập tốt nghiệp.pdf

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

diễn điểm, bề mặt, giá trị mầu, mô tả tính năng…

VD: PCL::PointXYZ; PCL::PointXY; PCL::PointXYZRGB;

2.1.2 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

- 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.

Page 71: Thực tập tốt nghiệp.pdf

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.

Page 72: Thực tập tốt nghiệp.pdf

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

Page 73: Thực tập tốt nghiệp.pdf

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…

Page 74: Thực tập tốt nghiệp.pdf

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:

Page 75: Thực tập tốt nghiệp.pdf

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.

Page 76: Thực tập tốt nghiệp.pdf

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ố.

Page 77: Thực tập tốt nghiệp.pdf

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.

Page 78: Thực tập tốt nghiệp.pdf

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.

Page 79: Thực tập tốt nghiệp.pdf

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:

Page 80: Thực tập tốt nghiệp.pdf

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.

Page 81: Thực tập tốt nghiệp.pdf

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ụ

Plannar Segmentation, Euclidean Cluster Extraction.

Mỗi nhóm điểm đại diện cho một vật cản và cung cấp thông tin giúp nhận dạng vật

cản, tính toán kích thước, khoảng cách đến vật cản để có thể tính toán tránh vật cản.

Kết quả sau khi cài đ t:

Page 82: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

82

MỤC LỤC

Page 83: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

83

1.GIỚI THIỆU CƠ BẢN VỀ KINECT ................................................................................................................... 44

1.1 cấu trúc phần cứng. ........................................................................................................................ 45

1.1.1 Camera RGB ......................................................................................................................... 45

1.1.2 Cảm biến độ sâu .................................................................................................................... 46

1.1.3 DãyMicrophone ..................................................................................................................... 46

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.1.1 PCL_Common: ............................................................................................................................. 50

2.1.2 Module Features: ........................................................................................................................... 50

2.1.3 Module Filters: .............................................................................................................................. 50

2.1.4 Module Geometry: ........................................................................................................................ 51

2.1.5 Module IO: .................................................................................................................................... 51

2.1.6 PCL_Kdtree: ................................................................................................................................. 51

2.1.7: PCL_Keypoint ............................................................................................................................. 52

2.1.8 PCL_Octree: .................................................................................................................................. 52

2.1.9 Module registrantion (PCL_registration): ..................................................................................... 53

2.1.10 Module PCL_sample_consensus: ............................................................................................... 53

2.1.11 PCL_Search ................................................................................................................................ 54

2.1.12 PCL_Segmentation ..................................................................................................................... 54

2.1.13 PCL_surface ................................................................................................................................ 54

2.1.14: PCL_visualization ...................................................................................................................... 56

2.2. ấu trúc dữ liệu cơ bản của P L ........................................................................................................ 57

2.2.1 PointCloud: ................................................................................................................................... 57

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

Page 84: Thực tập tốt nghiệp.pdf

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 .

Page 85: Thực tập tốt nghiệp.pdf

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.

Page 86: Thực tập tốt nghiệp.pdf

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 .

Page 87: Thực tập tốt nghiệp.pdf

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.

Page 88: Thực tập tốt nghiệp.pdf

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.

Page 89: Thực tập tốt nghiệp.pdf

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.

Page 90: Thực tập tốt nghiệp.pdf

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

diễn điểm, bề mặt, giá trị mầu, mô tả tính năng…

VD: PCL::PointXYZ; PCL::PointXY; PCL::PointXYZRGB;

2.1.2 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

- 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.

Page 91: Thực tập tốt nghiệp.pdf

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.

Page 92: Thực tập tốt nghiệp.pdf

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

Page 93: Thực tập tốt nghiệp.pdf

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…

Page 94: Thực tập tốt nghiệp.pdf

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:

Page 95: Thực tập tốt nghiệp.pdf

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.

Page 96: Thực tập tốt nghiệp.pdf

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ố.

Page 97: Thực tập tốt nghiệp.pdf

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.

Page 98: Thực tập tốt nghiệp.pdf

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.

Page 99: Thực tập tốt nghiệp.pdf

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:

Page 100: Thực tập tốt nghiệp.pdf

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.

Page 101: Thực tập tốt nghiệp.pdf

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ụ

Plannar Segmentation, Euclidean Cluster Extraction.

Mỗi nhóm điểm đại diện cho một vật cản và cung cấp thông tin giúp nhận dạng vật

cản, tính toán kích thước, khoảng cách đến vật cản để có thể tính toán tránh vật cản.

Kết quả sau khi cài đ t:

Page 102: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

102

MỤC LỤC

Page 103: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

103

1.GIỚI THIỆU CƠ BẢN VỀ KINECT ................................................................................................................... 44

1.1 cấu trúc phần cứng. ........................................................................................................................ 45

1.1.1 Camera RGB ......................................................................................................................... 45

1.1.2 Cảm biến độ sâu .................................................................................................................... 46

1.1.3 DãyMicrophone ..................................................................................................................... 46

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.1.1 PCL_Common: ............................................................................................................................. 50

2.1.2 Module Features: ........................................................................................................................... 50

2.1.3 Module Filters: .............................................................................................................................. 50

2.1.4 Module Geometry: ........................................................................................................................ 51

2.1.5 Module IO: .................................................................................................................................... 51

2.1.6 PCL_Kdtree: ................................................................................................................................. 51

2.1.7: PCL_Keypoint ............................................................................................................................. 52

2.1.8 PCL_Octree: .................................................................................................................................. 52

2.1.9 Module registrantion (PCL_registration): ..................................................................................... 53

2.1.10 Module PCL_sample_consensus: ............................................................................................... 53

2.1.11 PCL_Search ................................................................................................................................ 54

2.1.12 PCL_Segmentation ..................................................................................................................... 54

2.1.13 PCL_surface ................................................................................................................................ 54

2.1.14: PCL_visualization ...................................................................................................................... 56

2.2. ấu trúc dữ liệu cơ bản của P L ........................................................................................................ 57

2.2.1 PointCloud: ................................................................................................................................... 57

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

Page 104: Thực tập tốt nghiệp.pdf

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 .

Page 105: Thực tập tốt nghiệp.pdf

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.

Page 106: Thực tập tốt nghiệp.pdf

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 .

Page 107: Thực tập tốt nghiệp.pdf

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.

Page 108: Thực tập tốt nghiệp.pdf

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.

Page 109: Thực tập tốt nghiệp.pdf

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.

Page 110: Thực tập tốt nghiệp.pdf

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

diễn điểm, bề mặt, giá trị mầu, mô tả tính năng…

VD: PCL::PointXYZ; PCL::PointXY; PCL::PointXYZRGB;

2.1.2 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

- 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.

Page 111: Thực tập tốt nghiệp.pdf

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.

Page 112: Thực tập tốt nghiệp.pdf

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

Page 113: Thực tập tốt nghiệp.pdf

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…

Page 114: Thực tập tốt nghiệp.pdf

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:

Page 115: Thực tập tốt nghiệp.pdf

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.

Page 116: Thực tập tốt nghiệp.pdf

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ố.

Page 117: Thực tập tốt nghiệp.pdf

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.

Page 118: Thực tập tốt nghiệp.pdf

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.

Page 119: Thực tập tốt nghiệp.pdf

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:

Page 120: Thực tập tốt nghiệp.pdf

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.

Page 121: Thực tập tốt nghiệp.pdf

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ụ

Plannar Segmentation, Euclidean Cluster Extraction.

Mỗi nhóm điểm đại diện cho một vật cản và cung cấp thông tin giúp nhận dạng vật

cản, tính toán kích thước, khoảng cách đến vật cản để có thể tính toán tránh vật cản.

Kết quả sau khi cài đ t:

Page 122: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

122

MỤC LỤC

Page 123: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

123

1.GIỚI THIỆU CƠ BẢN VỀ KINECT ................................................................................................................... 44

1.1 cấu trúc phần cứng. ........................................................................................................................ 45

1.1.1 Camera RGB ......................................................................................................................... 45

1.1.2 Cảm biến độ sâu .................................................................................................................... 46

1.1.3 DãyMicrophone ..................................................................................................................... 46

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.1.1 PCL_Common: ............................................................................................................................. 50

2.1.2 Module Features: ........................................................................................................................... 50

2.1.3 Module Filters: .............................................................................................................................. 50

2.1.4 Module Geometry: ........................................................................................................................ 51

2.1.5 Module IO: .................................................................................................................................... 51

2.1.6 PCL_Kdtree: ................................................................................................................................. 51

2.1.7: PCL_Keypoint ............................................................................................................................. 52

2.1.8 PCL_Octree: .................................................................................................................................. 52

2.1.9 Module registrantion (PCL_registration): ..................................................................................... 53

2.1.10 Module PCL_sample_consensus: ............................................................................................... 53

2.1.11 PCL_Search ................................................................................................................................ 54

2.1.12 PCL_Segmentation ..................................................................................................................... 54

2.1.13 PCL_surface ................................................................................................................................ 54

2.1.14: PCL_visualization ...................................................................................................................... 56

2.2. ấu trúc dữ liệu cơ bản của P L ........................................................................................................ 57

2.2.1 PointCloud: ................................................................................................................................... 57

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

Page 124: Thực tập tốt nghiệp.pdf

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 .

Page 125: Thực tập tốt nghiệp.pdf

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.

Page 126: Thực tập tốt nghiệp.pdf

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 .

Page 127: Thực tập tốt nghiệp.pdf

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.

Page 128: Thực tập tốt nghiệp.pdf

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.

Page 129: Thực tập tốt nghiệp.pdf

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.

Page 130: Thực tập tốt nghiệp.pdf

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

diễn điểm, bề mặt, giá trị mầu, mô tả tính năng…

VD: PCL::PointXYZ; PCL::PointXY; PCL::PointXYZRGB;

2.1.2 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

- 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.

Page 131: Thực tập tốt nghiệp.pdf

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.

Page 132: Thực tập tốt nghiệp.pdf

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

Page 133: Thực tập tốt nghiệp.pdf

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…

Page 134: Thực tập tốt nghiệp.pdf

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:

Page 135: Thực tập tốt nghiệp.pdf

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.

Page 136: Thực tập tốt nghiệp.pdf

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ố.

Page 137: Thực tập tốt nghiệp.pdf

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.

Page 138: Thực tập tốt nghiệp.pdf

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.

Page 139: Thực tập tốt nghiệp.pdf

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:

Page 140: Thực tập tốt nghiệp.pdf

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.

Page 141: Thực tập tốt nghiệp.pdf

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ụ

Plannar Segmentation, Euclidean Cluster Extraction.

Mỗi nhóm điểm đại diện cho một vật cản và cung cấp thông tin giúp nhận dạng vật

cản, tính toán kích thước, khoảng cách đến vật cản để có thể tính toán tránh vật cản.

Kết quả sau khi cài đ t:

Page 142: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

142

MỤC LỤC

Page 143: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

143

1.GIỚI THIỆU CƠ BẢN VỀ KINECT ................................................................................................................... 44

1.1 cấu trúc phần cứng. ........................................................................................................................ 45

1.1.1 Camera RGB ......................................................................................................................... 45

1.1.2 Cảm biến độ sâu .................................................................................................................... 46

1.1.3 DãyMicrophone ..................................................................................................................... 46

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.1.1 PCL_Common: ............................................................................................................................. 50

2.1.2 Module Features: ........................................................................................................................... 50

2.1.3 Module Filters: .............................................................................................................................. 50

2.1.4 Module Geometry: ........................................................................................................................ 51

2.1.5 Module IO: .................................................................................................................................... 51

2.1.6 PCL_Kdtree: ................................................................................................................................. 51

2.1.7: PCL_Keypoint ............................................................................................................................. 52

2.1.8 PCL_Octree: .................................................................................................................................. 52

2.1.9 Module registrantion (PCL_registration): ..................................................................................... 53

2.1.10 Module PCL_sample_consensus: ............................................................................................... 53

2.1.11 PCL_Search ................................................................................................................................ 54

2.1.12 PCL_Segmentation ..................................................................................................................... 54

2.1.13 PCL_surface ................................................................................................................................ 54

2.1.14: PCL_visualization ...................................................................................................................... 56

2.2. ấu trúc dữ liệu cơ bản của P L ........................................................................................................ 57

2.2.1 PointCloud: ................................................................................................................................... 57

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

Page 144: Thực tập tốt nghiệp.pdf

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 .

Page 145: Thực tập tốt nghiệp.pdf

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.

Page 146: Thực tập tốt nghiệp.pdf

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 .

Page 147: Thực tập tốt nghiệp.pdf

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.

Page 148: Thực tập tốt nghiệp.pdf

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.

Page 149: Thực tập tốt nghiệp.pdf

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.

Page 150: Thực tập tốt nghiệp.pdf

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

diễn điểm, bề mặt, giá trị mầu, mô tả tính năng…

VD: PCL::PointXYZ; PCL::PointXY; PCL::PointXYZRGB;

2.1.2 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

- 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.

Page 151: Thực tập tốt nghiệp.pdf

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.

Page 152: Thực tập tốt nghiệp.pdf

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

Page 153: Thực tập tốt nghiệp.pdf

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…

Page 154: Thực tập tốt nghiệp.pdf

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:

Page 155: Thực tập tốt nghiệp.pdf

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.

Page 156: Thực tập tốt nghiệp.pdf

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ố.

Page 157: Thực tập tốt nghiệp.pdf

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.

Page 158: Thực tập tốt nghiệp.pdf

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.

Page 159: Thực tập tốt nghiệp.pdf

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:

Page 160: Thực tập tốt nghiệp.pdf

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.

Page 161: Thực tập tốt nghiệp.pdf

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ụ

Plannar Segmentation, Euclidean Cluster Extraction.

Mỗi nhóm điểm đại diện cho một vật cản và cung cấp thông tin giúp nhận dạng vật

cản, tính toán kích thước, khoảng cách đến vật cản để có thể tính toán tránh vật cản.

Kết quả sau khi cài đ t:

Page 162: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

162

Page 163: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

163

MỤC LỤC

1.GIỚI THIỆU CƠ BẢN VỀ KINECT ................................................................................................................... 44

1.1 cấu trúc phần cứng. ........................................................................................................................ 45

1.1.1 Camera RGB ......................................................................................................................... 45

1.1.2 Cảm biến độ sâu .................................................................................................................... 46

1.1.3 DãyMicrophone ..................................................................................................................... 46

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.1.1 PCL_Common: ............................................................................................................................. 50

2.1.2 Module Features: ........................................................................................................................... 50

2.1.3 Module Filters: .............................................................................................................................. 50

2.1.4 Module Geometry: ........................................................................................................................ 51

2.1.5 Module IO: .................................................................................................................................... 51

2.1.6 PCL_Kdtree: ................................................................................................................................. 51

2.1.7: PCL_Keypoint ............................................................................................................................. 52

2.1.8 PCL_Octree: .................................................................................................................................. 52

2.1.9 Module registrantion (PCL_registration): ..................................................................................... 53

2.1.10 Module PCL_sample_consensus: ............................................................................................... 53

2.1.11 PCL_Search ................................................................................................................................ 54

2.1.12 PCL_Segmentation ..................................................................................................................... 54

2.1.13 PCL_surface ................................................................................................................................ 54

2.1.14: PCL_visualization ...................................................................................................................... 56

2.2. ấu trúc dữ liệu cơ bản của P L ........................................................................................................ 57

2.2.1 PointCloud: ................................................................................................................................... 57

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

Page 164: Thực tập tốt nghiệp.pdf

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 .

Page 165: Thực tập tốt nghiệp.pdf

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.

Page 166: Thực tập tốt nghiệp.pdf

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 .

Page 167: Thực tập tốt nghiệp.pdf

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.

Page 168: Thực tập tốt nghiệp.pdf

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.

Page 169: Thực tập tốt nghiệp.pdf

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.

Page 170: Thực tập tốt nghiệp.pdf

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

diễn điểm, bề mặt, giá trị mầu, mô tả tính năng…

VD: PCL::PointXYZ; PCL::PointXY; PCL::PointXYZRGB;

2.1.2 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

- 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.

Page 171: Thực tập tốt nghiệp.pdf

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.

Page 172: Thực tập tốt nghiệp.pdf

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

Page 173: Thực tập tốt nghiệp.pdf

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…

Page 174: Thực tập tốt nghiệp.pdf

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:

Page 175: Thực tập tốt nghiệp.pdf

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.

Page 176: Thực tập tốt nghiệp.pdf

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ố.

Page 177: Thực tập tốt nghiệp.pdf

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.

Page 178: Thực tập tốt nghiệp.pdf

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.

Page 179: Thực tập tốt nghiệp.pdf

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:

Page 180: Thực tập tốt nghiệp.pdf

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.

Page 181: Thực tập tốt nghiệp.pdf

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ụ

Plannar Segmentation, Euclidean Cluster Extraction.

Mỗi nhóm điểm đại diện cho một vật cản và cung cấp thông tin giúp nhận dạng vật

cản, tính toán kích thước, khoảng cách đến vật cản để có thể tính toán tránh vật cản.

Kết quả sau khi cài đ t:

Page 182: Thực tập tốt nghiệp.pdf

Báo cáo thực tập tốt nghiệp

182