bao cao toan van nckh gv 2012 - nguyen phat nhut

48
1 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC LẠC HỒNG *** BÁO CÁO NGHIÊN CỨU KHOA HỌC ĐỀ TÀI: NGHIÊN CỨU, ỨNG DỤNG OPENCV VÀ KINECT HỖ TRỢ DÒ ĐƯỜNG ĐI CHO ROBOT THỰC HIỆN: ThS. NGUYỄN PHÁT NHỰT KS. TRƯƠNG THỊ QUỲNH HƯƠNG Đồng Nai, Năm 2012

Upload: nguyen-manh-the

Post on 09-Dec-2015

25 views

Category:

Documents


8 download

DESCRIPTION

Bao Cao Toan Van NCKH GV 2012

TRANSCRIPT

Page 1: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

1

BỘ GIÁO DỤC VÀ ĐÀO TẠOTRƯỜNG ĐẠI HỌC LẠC HỒNG

***

BÁO CÁO NGHIÊN CỨU KHOA HỌC

ĐỀ TÀI:NGHIÊN CỨU, ỨNG DỤNG OPENCV VÀ KINECT HỖ TRỢ DÒ ĐƯỜNG ĐI

CHO ROBOT

THỰC HIỆN: ThS. NGUYỄN PHÁT NHỰTKS. TRƯƠNG THỊ QUỲNH HƯƠNG

Đồng Nai, Năm 2012

Page 2: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

2

BỘ GIÁO DỤC VÀ ĐÀO TẠOTRƯỜNG ĐẠI HỌC LẠC HỒNG

***

BÁO CÁO NGHIÊN CỨU KHOA HỌC

ĐỀ TÀI:NGHIÊN CỨU, ỨNG DỤNG OPENCV VÀ KINECT HỖ TRỢ DÒ ĐƯỜNG ĐI

CHO ROBOT

THỰC HIỆN: ThS. NGUYỄN PHÁT NHỰTKS. TRƯƠNG THỊ QUỲNH HƯƠNG

Đồng Nai, Năm 2012

Page 3: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

3

Mục lục: TrangMỞ ĐẦU................................................................................................................ 1Chương 1: Giới thiệu tổng quan đề tài .................................................................... 3

1.1 Tổng quan sự phát triển robot trên thế giới.................................................31.2 Robot dịch vụ ..............................................................................................41.3 Các nền tảng phần mềm cho robot .............................................................71.4 Hệ điều hành robot......................................................................................9

1.4.1 ROS (www.ros.org)...............................................................................91.4.2 Microsoft Robotics Developer Studio ..................................................101.4.3 URBI (www.urbiforge.com) .................................................................121.4.4 OROCOS............................................................................................131.4.5 Skilligent (skilligent.com).....................................................................141.4.6 Robotics ERSP ...................................................................................141.4.7 LabVIEW Robotics..............................................................................15

1.5 Giới thiệu thiết bị Kinect ............................................................................161.5.1 Giới thiệu chung..................................................................................161.5.2 Các thành phần của Kinect.................................................................171.5.3 Tiêu cự, góc mở IR camera và RGB camera:.....................................201.5.4 Nguồn cung cấp và công suất tiêu thụ:...............................................201.5.5 Công suất tiêu thụ đo bằng thực nghiệm:...........................................211.5.6 Môi trường hoạt động .........................................................................21

1.6 Thư viện OpenCV .....................................................................................211.6.1 Tổng quan về thư viện OpenCV .........................................................211.6.2 Những khả năng của OpenCV............................................................211.6.3 Cấu tạo của OpenCV..........................................................................22

1.7 Thư viện hỗ trợ Kinect...............................................................................231.7.1 Libfreenect: .........................................................................................231.7.2 Code Laboratories Kinect: ..................................................................231.7.3 OpenNI:...............................................................................................231.7.4 Kinect SDK beta:.................................................................................231.7.5 Point Cloud Library .............................................................................24

Chương 2: Nội dung nghiên cứu........................................................................... 252.1 Tổng quan về SIFT....................................................................................252.2 Nội dung giải thuật ....................................................................................26

2.2.1 Dò tìm cực trị cục bộ...........................................................................262.2.2 Trích xuất keypoint..............................................................................292.2.3 Gắn hướng cho các keypoint..............................................................30

Page 4: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

4

2.2.4 Tạo bộ mô tả cục bộ .............................................................................. 312.3 Mô tả xây dựng chương trình xác định vị trí đối tượng................................ 32

2.3.1 Phương pháp thực hiện......................................................................... 322.3.2 Mã chương trình nhận dạng đối tượng.................................................. 32

Chương 3 Kết quả thử nghiệm và định hướng ứng dụng ...................................... 41Tài liệu tham khảo ................................................................................................ 42

Danh mục hình ảnhHình 1.1. - robot dịch vụ cá nhân ............................................................................3Hình 1.2. - Hệ thống robot phẫu thuật DaVinci .......................................................4Hình 1.3. – Robot chăm sóc sức khỏe từ xa...........................................................4Hình 1.4. - Robot di động trong nhà........................................................................5Hình 1.5. - Kho hàng robot......................................................................................5Hình 1.6. - Xe không người lái ................................................................................6Hình 1.7. - Dexter Robot .........................................................................................6Hình 1.8. - Dịch vụ đào tạo Robot...........................................................................6Hình1.9. - Một robot dịch vụ được đào tạo tự làm công việc của mình ..................7Hình 1.10. - Một hoạt động cá nhân Robot tele lấy một ly bia ................................7Hình 1.11: Thiết bị Kinect......................................................................................16Hình 1.12 Cấu trúc các thành phần của Kinect.....................................................17Hình 1.13 Động cơ điều khiển góc ngẩng Kinect..................................................17Hình 1.14: Bên trong Kinect: RGB, IR camera và IR projector .............................17Hình 1.15: Quá trình thu về bản đồ độ sâu ảnh ....................................................18Hình 1.16: Mẫu hình được chiếu bởi projector và chụp lại bằng IR camera.........18Hinh 1.17: Tính toán khoảng cách tới một điểm chiếu từ Projector ......................19Hình 1.18: Kinect adapter .....................................................................................21Hình 1.19: Point cloud library logo ........................................................................24Hình 2.1: Minh họa các bước chính trong giải thuật SIFT ....................................26Hình 2.2. Quá trình tính không gian đo (L) và hàm sai khác D .............................27Hình 2.3 Quá trình tìm điểm cực trị trong các hàm sai khác DoG ........................28Hình 2.4: Mô phỏng sử dụng công thức mở rộng của Taylor cho hàm DoG........29Hình 2.5. Minh họa các bước của quá trình lựa chọn các điểm keypoints. ..........30Hình 2.6: Mô tả tạo bộ mô tả cục bộ .....................................................................31Hình 2.7. Mô tả việc chia màn hình ra làm 9 phần để định vị vị trí đối tượng ......32

Page 5: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

5

Danh mục bảng: TrangBảng 1.1 So sánh tính năng các loại hệ điều robot ....................................................7Bảng 1.2: Góc mở và tiêu cự của RGB và IR camera ..............................................20Bảng 1.3: Công suất tiêu thụ trên Kinect ..................................................................21

Danh mục từ viết tắc:

SIFT: Scale-Invarian Feature Transform.MRDS: Microsoft Robotics Developer StudioRTT: Orocos Real-Time ToolkitOCL: Library Orocos Components

Page 6: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut
Page 7: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

1

MỞ ĐẦU

Xử lí ảnh số (DIP - Digital Image Processing) nói chung và nhận dạng đối tượng(Object Recognition) nói riêng, đã và đang được ứng dụng rất nhiều. Nó trải rộng trênmọi mặt trong cuộc sống từ xử lí các bản in ấn, báo, bìa tạp chí đến vấn đề về nănglực nhìn trong máy học, đôi khi nó rất gần gũi trong cuộc sống hàng ngày mà nhiềungười không nhận ra như chức năng nhận dạng khuôn mặt, đối tượng chuyển độngtrong các máy ảnh, máy quay phim hay đơn giản là chức năng camera của điện thoạiđi động cũng được tích hợp các công cụ xử lí ảnh và nhận dạng đối tượng. Đề cậpsâu hơn vào vấn đề nhận dạng đối tượng là các bài toán cụ thể như nhận dạng dấuvân tay, nhận dạng khuôn mặt, nhận dạng chữ viết. Các bài toán này được ứng dụngrất nhiều trong nhận dạng đối tượng hình sự, phục vụ điều tra, kiểm chứng.

Từ những ứng dụng rộng rãi như vậy mà tại các tổ chức, các trung tâm nghiêncứu của các trường đại học trên thế giới, các đề tài về xử lí ảnh luôn được đầu tưnhiều về vật chất lẫn thời gian. Tuy trong nước, ở các năm gần đây mặc dù cácnghiên cứu về xử lí ảnh và nhận dạng đối tượng phát triển mạnh nhưng thông quacác cuộc hội thảo quốc gia thì vấn đề này chưa nhận được nhiều kết quả như mongđợi và cần đầu tư nhiều hơn nữa.

Trong vấn đề cụ thể nhận dạng đối tượng thì ngày nay hướng nghiên cứu phổbiến trên thế giới là việc sử dụng các điểm bất biến (Invarian Feature) trong ảnh làmđặc trưng (Keypoint) để nhận dạng. Tiêu biểu nhất trong các thuật toán đối sánh sửdụng keypoint dạng này là thuật toán SIFT (Scale-Invarian Feature Transform, DavidLowe 1999 và 2004), SIFT có thể coi là thuật toán tiền đề cho các ứng dụng cũng nhưgiải thuật khác về biến đổi đặc trưng bất biến trong ảnh. Các giải thuật đang ứng dụngtrong thực tế khác đều dựa trên hay phát triển theo các nhánh riêng của SIFT.

Các đặc trưng trong SIFT không phụ thuộc vào các phép biến đổi ảnh cơ bảnnhư xoay, thu phóng, thay đổi độ sáng... nên có thể xem tập các đặc trưng của mộtảnh là thể hiện cho nội dung của ảnh đó. Vì vậy kết quả của việc nhận dạng sẽ có độchính xác rất cao và thậm chí có thể khôi phục được đối tượng bị che khuất trong ảnh.Tuy nhiên giải thuật SIFT rất phức tạp trong cài đặt, đòi hỏi thời gian nghiên cứu vàam hiểu nhiều thuật toán thành phần.Sự cần thiết của đề tài

Theo dự đoán trong vòng 20 năm nữa mỗi người sẽ có nhu cầu sử dụng mộtrobot cá nhân như nhu cầu một máy tính PC hiện nay và robot sẽ là tâm điểm của mộtcuộc cách mạng lớn sau Internet. Với xu hướng này, cùng các ứng dụng truyền thốngkhác của robot trong công nghiệp, y tế, giáo dục đào tạo, giải trí và đặc biệt là trong anninh quốc phòng thì thị trường robot sẽ vô cùng to lớn.

Trước sự phát triển đầy triển vọng của lĩnh vực robot hiện tại cũng như trongtương lai. Nhóm tác giả tập chuyên ngành công nghệ thông tin, tập trung nghiên cứulĩnh vực Computer Vision chuyên về lĩnh vực xử lý ảnh để gắn “mắt” cho robot. Đây làlĩnh vực rất thú vị, robot sẽ còn là một khối kim loại chỉ biết dò đường bằng các công

Page 8: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

2

nghệ điện tử không qua “xúc giác” chính mà nhìn thế giới xung quanh bằng “đôi mắt”giống như con người.

Mục tiêu nghiên cứuNghiên cứu xây dựng chương trình hỗ trợ dò đường đi cho robot bằng kĩ thuật xử

lý ảnh với các chức năng:Nhận dạng đối tượng cho robot bằng công nghệ xử lý ảnh (dựa vào đặc trưng

của đối tượng): SIFT (Scale-Invarian Feature Transform, David Lowe 1999 và 2004),OpenCV (Computer Vision)

Xác định vật cản phía trước robot bằng cách sử dụng thiết bị Kinect kết hợpOpenNI, PCL (Point Cloud Library) và cvBlobsÝ nghĩa khoa học, tính thực triễn và khả năng ứng dụng

Robot đã có những bước tiến đáng kể trong hơn nửa thế kỷ qua. Robot đầu tiênđược ứng dụng trong công nghiệp vào những năm 60 để thay thế con người làmnhững công việc nặng nhọc, nguy hiểm trong môi trường độc hại. Do nhu cầu sửdụng ngày càng nhiều trong quá trình sản xuất phức tạp nên robot công nghiệp cần cónhững khả năng thích ứng linh hoạt và thông minh hơn. Ngày nay, ngoài ứng dụng sơkhai ban đầu của robot trong chế tạo máy thì các ứng dụng khác như trong y tế, chămsóc sức khỏe, nông nghiệp, đóng tàu, xây dựng, an ninh quốc phòng đang là động lựccho sự phát triển của ngành công nghiệp robot.

Có thể kể đến những loại robot được quan tâm hiều trong thời gian qua là: taymáy robot (Robot anipulators), robot di động (Mobile Robots), robot phỏng sinh học(Bio Inspired Robots) và robot cá nhân (Personal Robots). Robot di động được nghiêncứu nhiều như xe tự hành trên mặt đất AGV (Autonomous Guided Vehicles), robot tựhành dưới nước AUV (Autonomous Underwater Vehicles), robot tự hành trên khôngUAV (Unmanned Arial Vehicles) và robot vũ trụ (Space robots). Với robot phỏng sinhhọc, các nghiên cứu trong thời gian qua tập trung vào hai loại chính là robot đi bộ(Walking robot) và robot dáng người (Humanoid robot). Bên cạnh đó các loại robotphỏng sinh học như cá dưới nước, các cấu trúc chuyển động phỏng theo sinh vật biểncũng được nhiều nhóm nghiên cứu, phát triển.

Page 9: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

3

1 Chương 1: Giới thiệu tổng quan đề tài1.1 Tổng quan sự phát triển robot trên thế giới

Thị trường robot non trẻ ngày nay với gần hai dự án phần mềm, hầu hết đềuphát triển trên hệ điều hành Linux. Bài viết này mô tả một trong số những phần mềmđó, phân tích và chọn phần mềm có nền tảng là tốt nhất để sử dụng.

Điều gì là khác biệt giữa robot dịch vụ với robot công nghiệp? Đối với hầu hếtcác robot công nghiệp, được thiết kế để làm việc trong công nghiệp được cài đạt vàkiểm soát rất chặt chẽ. Hệ thống computer vision sử dụng trong công nghiệp khôngthể để đối phó với những thay đổi trong chiếu sáng mà không cần cấu hình lại hoặclập trình lại.

Mặt khác, giao tiếp với thế giới bên ngoài luôn năng động và luôn thay đổi làmột yêu cầu sống còn cho hầu hết các robot dịch vụ.

Hình1.1. - robot dịch vụ cá nhânCác yếu tố ảnh hưởng và yêu cầu robot dịch vụ phải hoạt động tốt như: các

thiết bị nội thất mới, người đi bộ, các đối tượng bị thiếu hoặc robot không nhận biết,người dùng không chuyên nghiệp, trẻ em, vật nuôi, xe ô tô trên đường. Bên cạnh đó,hầu hết các robot dịch vụ điện thoại di động và làm việc gần với mọi người. Do yêucầu đặt biệt của robot dịch vụ nên đã tạo ra một ngành công nghiệp mới được thiết kếđặc biệt cho các ứng dụng robot dịch vụ.

Xây dựng một robot làm việc cho phòng khách sạn, dọn dẹp nhà cửa, hoặcphục vụ bữa ăn sáng là mơ ước của tất cả các robot dịch vụ. Một công ty cung cấpsản phẩm ở một mức giá hợp lý có thể sẽ làm cho doanh số bán hàng của công ty làrất lớn. Quân đội đang tìm kiếm cho robot có thể được sử dụng để chống lại cuộcchiến tranh, người nông dân rất thích robot để phát triển cây trồng.

Page 10: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

4

Hình 1.2. - Hệ thống robot phẫu thuật DaVinciGần như mọi ngành công nghiệp có sử dụng các robot dịch vụ như:

Robot chăm sóc người cao tuổi. Máy quét tự động và giám sát sức khỏe (chăm sóc sức khỏe) Robot phẫu thuật (chăm sóc sức khỏe) Robot giao hàng (khách sạn, bệnh viện, nhà hàng, văn phòng) Robot hái cây trồng (nông nghiệp) Xe không người lái (phòng thủ) Xử lý bom (phòng thủ) An ninh, tuần tra Giải trí (nhà, bảo tàng, công viên) Làm sạch vệ sinh Khai thác mỏ Sự chửa cháy

1.2 Robot dịch vụMặc dù robot dịch vụ là một ngành công nghiệp tương đối trẻ, nó đã trải qua

một quá trình cải tiến liên tục trong công nghệ. Nhiều robot dịch vụ hiện nay được triểnkhai vẫn còn điều khiển từ xa bởi một nhà điều hành là con người.Mỗi chuyển độngcủa những robot được khởi động và điều khiển bởi con người.

Hình 1.3. –Robot chăm sóc sức khỏe từ xaCác robot phẫu thuậthoàn chỉnh, và telepresence robot chăm sóc y tế là những

ví dụ tốt của dịch vụ robot điều khiển từ xa. Robot dịch vụ tự chuyển hướng và tránhchướng ngại vật trong nhà chuyển, robot tự lái xe ngoài trời. Nội thất trong nhà, tránhchướng ngại vật, và định hướng đi đã được học viện nghiên cứutrong nhiều năm, vàđã phát triển thành một công nghệ ngày một phát triển. Số lượng robot trên thị trường

Page 11: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

5

ngày càng tăngthể hiện sự thành công trong lĩnh vực robot dịch vụ được sử dụngtrong các văn phòng hoặc thiết lập sử dụng trong nhà.

Hình 1.4. - Robot di động trong nhàCông nghệ robot tự chuyển động và định hướng đi trong nhà phụ thuộc rất

nhiều vào phạm vi laser dò tìm, tia hồng ngoại siêu âm để phát hiện chướng ngại vật,cảm biến cảm ứng, các thuật toán computer vision, và lập bản đồ trong phòng.

Hình 1.5. - Kho hàng robotNgày nay, một số công ty cung cấp robot tự hành trong nhà và ngoài trời, xe

không người lái (UV), robot tự hút bụi,robot kho, robot cắt cỏ, robot giao hàng tận nơi,phương tiện robot đi lại nông nghiệp. Tùy thuộc vào các nhiệm vụ, phương tiện xe đilại không người lái, robotphát hiện xâm nhập, robot phát hiện đám cháy, robot pháthiện Sniper, hoặc các thẻ RFID kiểm soát, robot tự hành, điện thoại di động có thể lậptrình để làm việc cùng với các robot

Page 12: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

6

Hình 1.6. - Xe không người láiCác robot dịch vụ công nghệđã phải di chuyển vượt ra ngoài chuyển hướng tự

hành bằng robot tự học tập và robot dịch vụ xã hội,là sự phát triển tiếp theo của côngnghệ.

Hình 1.7. - Dexter RobotHọc công nghệ là chìa khóa cho phép các robot thông minh và tự chủ trong các

thao tác của cánh tay robot trong các môi trường khác nhau. Các phiên bản mới nhấtcủa hệ thống điều khiển học có thể khám phá ra thuộc tính đối tượng, tương tác vớicon người, và thậm chí đoán ý định của con người.

Hình 1.8. - Dịch vụ đào tạo Robot

Page 13: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

7

Các phần mềm hướng dẫn học tập và robot xã hội được dựa trên một nguyêntắc mới cải thiện đáng kể từ phương pháp tiếp cận truyền thống, vì nó cho phép cácrobot tự tìm hiểu nhiệm vụ mới, hành vi trực tiếp từ con người mà không cầnlập trìnhlại. Thay vì xác định "những gì robot cần phải làm", phần mềm xác định "làm thế nàocác robot sẽ tìm hiểu những gì nó cần phải làm."

Hình1.9. - Một robot dịch vụ được đào tạo tự làm công việc của mìnhHãy tưởng tượng chúng ta là Guy Lucky chỉ có một Robot dịch vụ. Chúng ta

muốn robot dọn dẹp cho căn phònghàng ngày, hái cam trong khu vườn. Chúng ta sẽmong đợi robot tự học hỏi từ tất cả những điều muốn nó làm.

Hình 1.10. - Một hoạt động cá nhân Robot tele lấy một ly bia1.3 Các nền tảng phần mềm cho robot

Ngày nay thị trường robot dịch vụ được so sánh với thị trường máy tính. Nhưvậy, một số công ty đang cố gắng để trở thành "Next Microsoft Robotics” và xây dựngmột nền tảng phần mềm tiêu chuẩn robot, thường được gọi là hệ điều hành robot.Microsoft cũng có phần mềm nền tảng cho robot, được gọi là Microsoft RoboticsDeveloper Studio.

Thị trường robot đang phát triên sôi nổi như hiện nay đã xuất hiện một số nềntảng phần mềm robotcạnh tranh và không tương thích với nhau. Bảng thống kê dướiđây tóm tắt đầy đủ các tính năng liên quan của phần mềm robot đang nổi bật trên thịtrường hiện nay.

Bảng 1.1 So sánh tính năng các loại hệ điều robot

Page 14: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

8

Microsoft

RoboticsStudio

1.5

ĐiệnthoạidiđộngRobots

Skilligent

iRobot2.0

Gostai Urbi

Tiếnhóa

Robotics ERSP

3,1

OROCOS

Máynghenhạc,sân

khấu,Gazeb

oMã

nguồnmở

Không Không Không Không Mộtphần

Không Có Có

Miễn phí Edu/hby Không Không Không Lựachọnnềntảng

Không Có Có

Giao diệncửa sổ

Có Có Có ? Có Có Không Có

Linux Không Có Có Có Có Có Có CóPhân

phối dịchvụ kiến

trúc

Có Không Có Có Có Không Không Có(giớihạn)

Fault-ring Không Không Có Có Không

Không Không Không

JAUSComplian

t

Không Không Có Có (?) Không

Không Không Không

Đồ họaOCU

(Web) Có Có Có Có Có Không Không

Đồ họaplug-n-

Drop IDE

Có Không Không Không Có Có Không Không

Đượcxây dựng

trongđiềukhiển

cánh tayrobot

Không Có Có Có Không

Không Có Không

Đượcxây dựng

Không Không Có Không Không

Có Không Không

Page 15: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

9

trong xácnhậnVisual

đốitượngĐược

xây dựngtrong hệthống nộiđịa hóa

Không Có Có Khôngcó(miếng)

Không

Có Không Không

Robothọc tậpvà sựtương

tác xã hội

Không Không Có Không Không

Không Không Không

Môphỏng

môitrường

Có Có Không Có Có Không Không Có

Tái sửdụng

dịch vụXây

dựng

Có Có Có Có Có Có Có Không

Real-Time

Không Không Khôngcó (kếhoạch)

Không Không

Không Có Không

1.4 Hệ điều hành robot1.4.1 ROS (www.ros.org)

ROS (Hệ điều hành Robot) - Đây là phần mềm mã nguồn mở (BSD giấy phép -đó là có thể sử dụng và sửa đổi chươngtrình để phù hợp với mục tiêu của bạn,bao gồm cả cho mục đích thương mại).

ROS - là kết quả của WillowGarage nghiên cứu trong phòng thínghiệm phối hợp với Đại học Stanford.Dự án thực hiện kiểm soát hệ thống ROScủa một robot, và trên cơ sở phát triểncác gói phần mềm: thư viện Computervision, OpenCV, Hệ thống lập kế hoạch,hệ thống quản lý máy chủ và các công

Page 16: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

10

nghệ khác được sử dụng trong hàng chục dự án khoa học và áp dụng trên toàn thếgiới.

Nhiệm vụ chính của ROS - là khả năng tái sử dụng mã nguồn trong nghiên cứuvà phát triển robot.

ROS tích hợp các trình điều khiển khác nhau, các thuật toán, và mở thư việnphổ biến robot.

ROS cung cấp một loại chức năng Hệ thống Robot điều hành: Phần cứng kiểmsoát ở mức độ thấp của thiết bị, thực hiện chức năng, tin nhắn qua giữa các quá trình,phần mềm quản lý.

ROS không phải là một hệ thống thời gian thực, mặc dù nó có thể sử dụng hệthống thời gian thực (ví dụ, OROCOS-Bộ công cụ thời gian thực).

ROS - một hệ thống phân phối của các quá trình (các nút). Những quá trìnhnày có thể được đóng lại thành các package và stack được phổ biến một cách dễdàng.

ROS dễ dàng tích hợp với các phần mềm khác (hiện đang tích hợp vớiOpenRAVE, OROCOS và player).

ROS cố gắng không phụ thuộc vào các ngôn ngữ lập trình, tại thời điểm nàyđược triển khai thực hiện phiên bản của C + + và Python (có thử nghiệm Thư viện choLISP Octave Java).

ROS có một gói phần mềm xây dựng để thử nghiệm - rostest, tạo điều kiện choviệc thử nghiệm các ứng dụng.

ROS hỗ trợ khả năng mở rộng.ROS có hai phần: phần hệ thống điều hành của ROS và Ros-pkg package, mà

thực hiện tất cả các chức năng nội địa hoá, lập bản đồ, lập kế hoạch, nhận thức, môhình hóa, vv

Hiện nay chỉ có hoạt động trong hệ thống ROS UNIX như Ubuntu Linux.Đến nay, phiên bản mới nhất - ROS C Turtle. Hỗ trợ các robot:Lego NXT- STAIR 1 - Đại học Stanford- Aldebaran Nao- i-Sobot Của Kawada HPR2-V- TUM-Rosie- Marvin- Herb- Penn Quadrotors- Robotino- Meka Robots- SkybotixCác robot nổi tiếng nhất được chạy ROS như robot PR2 Willow Garage.1.4.2 Microsoft Robotics Developer Studio

Microsoft Robotics Developer Studio (Microsoft RDS,

Page 17: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

11

MRDS.)(www.microsoft.com/robotics/) - Windows theo định hướng phát triển ứngdụng môi trường cho các nền tảng robot.Phiên bản đầu tiên của Robotics Studio được phát hành vào năm 2006 và là phiênbản hiện đangcósẵnMicrosoft Robotics Developer Studio 2008 R3.Trong Robotics studio công cụ lập trình trực quan có sẵn, cũng như môi trường ảo bachiều mô phỏng vật lý của robot - PhysX.Các thành phần của Robotics Studio:

- Thời gian chạy môi trường - một môi trường mà trong đó các ứng dụng chorobot là theo dõi và tương tác với các ứng dụng khác cho robot. Các cơ sở môitrường Thời gian chạy là CLR 2.0, mà làm cho nó có thể viết các ứng dụngbằng cách sử dụng bất kỳ ngôn ngữ lập trình nền tảng Microsoft. NET.

- Thời gian chạy môi trường bao gồm hai yếu tố: CCR (cập đồng thời và phốihợp Thời gian chạy, Thư viện song song và phối hợp) - thư viện cho các dòngdữ liệu song song và không đồng bộ.

- DSS (Dịch vụ phần mềm được phân cấp, phân cấp dịch vụ phần mềm) - Mộtcông cụ cho các ứng dụng phân tán dựa trên dịch vụ (đối với công việc và giaothức tương tác được sử dụng phi tập trung hóa hệ thống Dịch vụ Nghị định thư(DSSP), mà là dựa trên giao thức SOAP - Trao đổi tin nhắn bất kỳ định dạngXML).

- VPL (Visual) - ngôn ngữ lập trình trực quan để viết các ứng dụng cho robot (sơđồ VPL được lưu trữ như XML-Schema)

- Mô phỏng môi trường mô phỏng môi trường cho các ứng dụng robot trongđiều kiện mô phỏng (Tuy nhiên, các mô hình vật lý trong Microsoft RoboticsStudio, cho rõ ràng, chứ không phải đơn giản, và giả lập này sẽ không làm việcmà tính toán chính xác là cần thiết.).

- Trong Robotics Studio, một ứng dụng- là thành phần của các thành phầnđồng thời lỏng. Đồng thời - tất cả cácthành phần trong các Studio Robotics- bất cứ điều gì nó là dịch vụ thực thi,có nghĩa là, ví dụ như các nhà pháttriển của chương trình đó là không cóđộng cơ vật lý và có 1 giao diện dịchvụ để áp dụng làm việc với động cơcủa các chương trình bằng văn bản.

- RDS cho phép các gói phần mềm để phát triển các chương trình cho một loạtcác nền tảng phần cứng.

Hỗ trợ các robot:- Pioneer 3DX- Lego Mindstorms NXT- iRobot Create

Page 18: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

12

- Aldebaran Nao- Parallax Boe-Bot- Segway RMP- RoombaDevTools- Parallax Boe-Bot- CoroWare CoroBot- Lynxmotion Lynx 6 Robotic Arm

- Tại thời điểm này, các gói phần mềm Microsoft Robotics Developer Studio 2008R3 (RDS) phân phối miễn phí và sẵn sàng tự do cho mọi người đều. Vấn đềduy nhất là không ai có thể chắc chắn rằng cách kéo trên một số các nhà pháttriển robot một lần nữa Microsoft không muốn được trả tiền cho sản phẩm củabạn.

- RDS tiêu cực nghiêm trọng - là phụ thuộc trên cả Windows và mã nguồn đóng.Ngoài ra, cần lưu ý rằng Robotics Developer Studio đã xây dựng trong hệ thốngAI - hệ thống Computer Vision, Danh mục và học máy. Một giao thức để sửdụng SOAP, cho sự tương tác của các dịch vụ phân phối, mặc dù không đượcthiết kế cho các ứng dụng làm việc trong thời gian thực.

1.4.3 URBI (www.urbiforge.com)URBI hệ thống từ công ty Pháp Gostai, Chúng tôi có mặt ở đây để biết thêm chitiết

đã viết.URBI - một nền tảng phần mềm nền

tảng mở cho C + +, được sử dụng để pháttriển các ứng dụng cho các robot và các hệthống phức tạp. URBI được dựa trên mộtkiến trúc thành phần phân tán UObject. Nócũng bao gồm urbiScript - Song song vàhướng sự kiện ngôn ngữ kịch bản.Kiến trúc URBI- URBI thực hiện một lớp trừu tượng bằng cách tách biệt các chương trình kiểm

soát trên các urbiScript từ sự tương tác với hệ điều hành. với lớp UObject-trìnhđiều khiển.

- Đó là, làm bạn với một URBI Robotcần phải tạo ra trung gian UObjecttrình điều khiển cho phần cứng củabạn.

- URBI lớn, cộng với một hệ thốngnền tảng - nó chạy trên Windows,Linux, và Mac OS.

- URBI có một tập hợp các công cụphát triển đồ họa - Gostai StudiovàGostai Lab.

Page 19: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

13

- URBI mô phỏng của ông có không, nhưng bạn có thể sử dụng Webots. Bắt đầuvới phiên bản thứ hai của Urbi ROS có thể tương tác với các công ty WillowGarage.

Và cuối cùng nhưng không kém - Gostai mở mã nguồn URBI SDKđược cấp phép theoAGPL GNU v3.- Hệ thống này cũng là tài liệu và hỗ trợ các mô hình phổ biến nhất của robot:

- Segway- Aibo ERS7/ERS2XX

- IRobot Create- Lego Mindstorms NXT- HRP-2 (hạn chế phát hành cho các thành viên của JRL)- Nao từ Aldebaran- Robotis Bioloid- Điện thoại di động Robots Pioneer

1.4.4 OROCOSOROCOS (Open Robot điều khiển dự án phần mềm) -(orocos.org)- phần mềm mã

nguồn mở để điều khiển robot.Dự án hỗ trợ các hướng dẫn sau đây OROCOS 4 C + + thư viện:Bộ công cụ thời gian thực,Hai. Kinematics và Thư viện Dynamics,Thư viện lọc Bayesian Hợp phần Orocos Thưviện.Kể từ khi OROCOS - nó chỉ đơn giản làmột tập hợp các thư viện, như một hệ quảkhông có công cụ phát triển mới lạOROCOS đồ họa và mô phỏng riêng củamình.- Orocos Real-Time Toolkit (RTT)

không tồn tại của chính nó, nhưngcung cấp cơ sở hạ tầng và chứcnăng của các ứng dụng khác. Thư viện tập trung vào các ứng dụng thời gian thựccho phép các mô-đun điều khiển hệ thống tương tác.

- Thư viện Orocos Components (OCL) cung cấp sẵn sàng để sử dụng các tínhnăng quản lý, cũng như các thành phần để kiểm soát và truy cập vào phần cứng.

- Kinematics Orocos và Dynamics Thư viện (KDL) là một phần của một chươngtrình phát triển trong C + +, trong đó, lần lượt, cho phép chúng tôi tính toán cácchuyển động cho phép thời gian thực

- Thư viện Orocos Bayesian Filtering Thư viện (BFL) 1 cấu trúc độc lập (khuônkhổ) cho mạng Bayesian động, đó là, đệ quy xử lý thông tin phù hợp với đánh giácủa các thuật toán được sử dụng trong quy tắc Bayes ', như các (mở rộng)Kalman Bộ lọc, bộ lọc hạt (Sequential Monte phương pháp).

- Máy nghe nhạc, cung cấp một giao diện mạng cho một loạt các phần cứng của

Page 20: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

14

robot và cảm biến. Mô hình Client-server và các cầu thủ cho phép chương trìnhkiểm soát các robot phải được viết bằng bất kỳ ngôn ngữ lập trình, và chạy trênbất kỳ máy tính nào kết nối vào mạng, cùng với robot.

- Các thành phần của dự án làm việc trên hệ điều hành tương thích POSIX, baogồm cả Linux, Mac OS X, Solaris, và BSD, kế hoạch porting Microsoft Windows.Dự án được thành lập năm 2000 Brian Gerkey, Richard Vaughan và AndrewHoward tại Đại học Nam California ở Los Angeles và được sử dụng rộng rãi tronggiáo dục và nghiên cứu robot.

- Các phần mềm được cấp giấy phép theo GNU General Public License tài liệu theoGiấy phép Tài liệu Tự do GNU.

1.4.5 Skilligent (skilligent.com)Các sản phẩm chính Robot Hoc

tậpvà Hệ thống kiểm soát hành vi,Trong đóbao gồm:- Các hệ thống thị giác máy -Robot Tầm nhìnhệ thống (phát hiện vàtheo dõi các đối tượngmà mô tả đượcchứa trong một cơ sở dữ liệu đặc biệt)- Danh mục hệ thống - Visualhệthống địaphương hoá (xác định địnhhướng của các cơ sở sau khi buổi tập).- Các yếu tố của hệ thống chịu lỗi kiểm soátlỗi, chịu kiểm soát khung (-JAUSHệthống quản lý phù hợp để phối hợp các công việc chung của tất cảcác mô- đun).- Sản phẩm triết học là để tạo ra một hệ thống quản lý học tậpđầy đủ. Sau khi cài đặt phần mềm trong robot,người sử dụng bắt đầu tương tác với robot, dạyhành vi mới, sử dụng ưu đãi mới cho việc học tậpmột robot. Ý tưởng là để chứng minh các trình tựcần thiết của hành động (cử chỉ một robot phải nhậnra những huấn luyện viên và thực hiện một bướccủa công việc). Việc lặp đi lặp lại quá trình học tậptiếp tụ c cho đến khi robot cho đến khi các robot không thể làm công việc của họ mộtcách độc lập.1.4.6 Robotics ERSP

ERSP từ công ty Robotics(www.evolution.com/products/ersp/)- Một khuôn khổcho phát triển phần mềm robot. Nó bao gồm ba phần chính:

- ViPR (Visual Pattern Recognition) module là một sự công nhận thị giác.- VSLAM - mô-đun định hướng dựa trên dữ liệu từ một máy ảnh duy nhất và bộ mãhóa quang học, cho phép nội địa hoá và lập bản đồ các khu vực lên đến 10 cm

- Ersa - hoạt động robot hệ thống cung cấp tất cả các cơ sở hạ tầng và chức

Page 21: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

15

năng quản lý của tất cả các thành phần phần cứng và phần mềm của robotTầm nhìn hệ thống máy tính và hệ thống SLAMdựa trên thuật toán SIFT. ERSPnền tảng đó là một chương trình lập trình trực quan dựa trên các đơn vị khácnhau "hành vi". Ngoài ra, ERSP có thể phát triển các chương trình trong mộtngôn ngữ lập trình kịch bản - Python (Python).

- ERSP - phát triển nền tảng và hỗ trợ các nền tảng sau đây:32-bit (64-bit) Debian 4,032-bit (64-bit) Fedora Core 8 Windows XP 32-bit- Phần mềm này được phân phối với một khung phổ quát cho máy tính xách tay -ER-1:). Trong ERSP là không có môi trường mô phỏng, cũng như không được hỗ trợbởi các kiến trúc phân phối.pháp của bên thứ ba đối với các robot iRobot1.4.7 LabVIEW Robotics

LabVIEW (Phòng thí nghiệm ảo Instrumentation Engineering Workbench)- một nền tảng phát triển đồ họa môi trường vànền tảng cho các chương trình đang chạy tạo ratrong các ngôn ngữ lập trình đồ họa, "G" Công ty National Instruments.

Tại trung tâm của LabVIEW là mô hình của dòng dữ liệu. Dây (Wire) dữ liệuđược truyền từ một trong những yếu tố để những người khác. Khái niệm này đượcgọi là lưu lượng dữ liệu. Bản chất của Sơ đồ khối - một nút (node), một đầu ra nút kếtnối với các yếu tố đầu vào của các nút khác.Các nút bắt đầu thực hiện chỉ khi tất cả yêucầu đến cho các dữ liệu.

Một trong những tính năng chính củalập trình trực quan - đang thực sự có thể làmột rõ ràng và đẹp! Mặt khác, nó có thể dễdàng biến thành bún...

LabVIEW được sử dụng trong thu thậpdữ liệu và chế biến, cũng như quản lý các đối tượng kỹ thuật và quy trình công nghệ.

LabVIEW hỗ trợ một phạm vi rộng lớn của thiết bị từ các nhà sản xuất khácnhau, và bao gồm nhiều thư viện thành phần, bao gồm, điều khiển robotvà hệ thốngmáytầmnhìn.Sản phẩm - LabVIEW Robotics www.ni.com/robotics/và LabVIEW RoboticsStarterKit.Nó dựa trên môi trường lập trình LabVIEW Lego NXTTuy nhiên, mô- đun LabVIEWbình thường với LabVIEW LEGO MINDSTORMS NXT Module cũng cho phép bạntương tác với tất cả các cảm biến, các robot LEGO Mindstorm NXT.Nhận xét:Sau khi xem xét các giải pháp phần mềm hiện có cho robot, bạn có thể làm cho kháiquát sau đây:

- Robosoft hoạt động như một trung gian giữa bình thường hệ điều hành và cácchương trình / Robot kịch bản kiểm soát

Page 22: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

16

2.1 Giới thiệu chung

- Robosoft có một cấu trúc mô-đun, mà chạy trên đầu trang của lớp cơ sở (khuônkhổ)

- Robosoft có một cấu trúc client-server phânphối "Tiêu chuẩn" Robosoftlà:

- Framework, cung cấp hoạt động điển hình, một lớp trừu tượng từ phần cứng,phần thông tin liên lạc chủ đề qua.

- Thêm vào các mô-đun thực hiện các thuật toán khác nhau robotehnicheskie(tầm nhìn máy tính, SLAM, học máy, chuyển động).

- Sim (mô phỏng là một phần quan trọng của phát triển phần mềm cho các robot- nó cho phép bạn để gỡ lỗi các thuật toán trong một môi trường ảo, mà khôngphải mua thiết bị đắt tiền.)

- Shell cho lập trình trực quan và điều khiển robot (trực quan và dễ tiếp cận lậptrình hướng đối tượng, đại diện của một robot trong một máy nhà nước hữuhạn phân cấp, vv)

1.5 Giới thiệu thiết bị Kinect1.5.1 Giới thiệu chung

Hình 1.11: Thiết bị KinectKinect là sản phẩm của Microsoft dựa trên công nghệ camera được phát triển bởiPrimeSense, 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ăm2010. Kinect được coi như là một thiết bị ngoại vi cho Xbox 360, cho phép giao tiếpvớ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ơigame trên Xbox. Khả năng hiểu được cử chỉ con người của Kinect dựa trên hai đặctính chính sau: thông tin về độ sâu ảnh (depth map), khả năng phát hiện và bámtheo đặc tính cơ thể người (body skeleton tracking).

Kinect đang giữ kỷ lục Guiness thế giới về “Thiết bị điện tử được tiêu thụ nhanhnhất” với 8 triệu sản phẩm trong 60 ngày. Mười triệu sản phẩm Kinect đã được phânphối trên thế giới vào ngày 9 tháng 3 năm 2011. Bên cạnh phục vụ cho mục đích chơigame, sản phẩm Kinect còn được dùng vào mục đích nghiên cứu xử lý ảnh 3D, pháthiện cử chỉ (gesture recognition), bám theo người (body tracking) và nhiều mục đíchkhác. Lý do chính cho sự thành công của sản phẩm Kinect là giá cả khá rẻ (khoảng140$ 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ấtlượng chấp nhận được.

Page 23: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

17

2.2 Những thành phần chính của Kinect

1.5.2 Các thành phần của Kinect

Hình 1.12 Cấu trúc các thành phần của KinectKinect gồm có: RGB camera, cảm biến độ sâu (3D Depth Sensors), dãy microphone(Multi-array Mic) và động cơ điều khiển góc ngẩng (Motorized Tilt).

RGB Camera: như một camera thông thường, có độ phân giải 640x480 với tốcđộ 30 fps.

Cảm biến độ sâu: độ sâu được thu về nhờ sự kết hợp của hai cảm biến:đènchiếu hồng ngoại (IR Projector) và camera hồng ngoại (IR camera).

Dãy đa microphone: gồm bốn microphone được bố trí dọc Kinect như trênhìnhtrên, được dùng vào các ứng dụng điều khiển bằng giọng nói.

Động cơ điều khiển góc ngẩng: là loại động cơ DC khá nhỏ, cho phép ta điềuchỉnh camera lên xuống để bảo đảm camera có được góc nhìn tốt nhất

Hình1.13 Động cơ điều khiển góc ngẩng Kinect

Một trong những đặc tính quan trọng nhất của Kinect đó là thu về giá trị độ sâu hay giátrị khoảng cách tới vật thể trong thế giới thực. Phần tiếp theo sẽ nói về nguyên lý hoạtđộng của Kinect trong việc tính toán giá trị này.Tính toán độ sâu

Hình 1.14: Bên trong Kinect: RGB, IR camera và IR projectorCặp cảm biến IR camera và IR projector sẽ phối hợp với nhau để cho ra giá trị độ sâuảnh bằng công nghệ Light Coding của PrimeSense.

Page 24: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

18

Hình 1.15: Quá trình thu về bản đồ độ sâu ảnhKhác với kỹ thuật Stereo Camera với việc dùng cặp camera giống nhau để xây

dựng nên bản đồ độ sâu, hay kỹ thuật Time-Of-Flight (TOF) định nghĩa khoảng cáchbằng ước lượng thời gian di chuyển của tia sáng đi và về trong không gian; kỹ thuậtLight Coding dùng một nguồn sáng hồng ngoại chiếu liên tục kết hợp với một camerahồng ngoại để tính toán khoảng cách. Công việc tính toán này được thực hiện bêntrong Kinect bằng chip PS1080 SoC của PrimeSense. Công nghệ mới này được cholà đáp ứng chính xác hơn, giá cả rẻ hơn cho việc sử dụng ở môi trường trong nhà.

Projector sẽ chiếu một chùm sáng hồng ngoại, tạo nên những đốm sáng ở khônggian phía trước Kinect, tập hợp đốm sáng được phát ra này là cố định. Những đốmsáng này được tạo ra nhờ một nguồn sáng truyền qua lưới nhiễu xạ (diffractiongratings). 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 [4] cho ra bản đồ độ sâu. Bản chất của giảithuậ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 mà ta sẽ đề cập sau. Hình 2.6 cho ta thấy rõ mẫu hình tập hợp các đốmsáng từ Projector và được chụp lại bởi IR camera.

Hình 1.16: Mẫu hình được chiếu bởi projector và chụp lại bằng IR camera

Page 25: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

19

Để hiểu cách thức Kinect ước lượng khoảng cách tới vật thể trong môi trườngnhư thế nào, ta quan sát hình trên trong trường hợp phân tích với một điểm đơn giản.

IR camera ProjectorHinh 1.17: Tính toán khoảng cách tới một điểm chiếu từ Projector

Ta giả sử Projector phát đi một tia sáng dọc đường màu xanh lá, nó sẽ đượcchụp lại dưới dạng một đốm sáng bởi IR camera khi chạm vào bề mặt vật thể trongkhông gian. Ta xét ba mặt phẳng ở ba khoảng cách khác nhau: mặt phẳng gần Kinect(close plane), mặt phẳng ở xa Kinect (distant plane) và mặt phẳng tham chiếu(reference plane) ở giữa hai mặt phẳng trên. Trong đó, mặt phẳng tham chiếu ngầmđược biết trước bên trong Kinect với đầy đủ thông tin về khoảng cách. Ngoài ra, tacũng đề cập thêm mặt phẳng ảnh (image plane) của IR camera, là mặt phẳng hìnhchiếu của các điểm trong không gian thu về bởi IR camera. Ta xét trong ba trường hợpkhi tia sáng màu xanh lá chạm vào ba điểm trên ba mặt phẳng lần lượt là A, B, C; bađiểm này được chiếu lên mặt phẳng ảnh tương ứng là A’, B’, C’. Quan sát vị trí A’, B’và C’, ta có nhận xét: điểm A càng gần Kinect (hay close plane càng gần Kinect) thì A’càng xa B’ về phía bên phải; ngược lại, điểm C càng xa Kinect (hay distant plane càngxa Kinect) thì C’ càng xa B’ về phía bên trái. Từ đó: khi ta biết trước hướng, điểm xuấtphát của tia sáng từ Projector và vị trí B’ là hình chiếu của điểm B trên mặt phẳng thamchiếu lên mặt phẳng ảnh, ta hoàn toàn có thể tính toán được độ sâu ảnh hay khoảngcách tới vật thể.Kinect làm điều tương tự với tập hợp các đốm sáng còn lại phát đi từ projector, vớimặt phẳng tham chiếu biết trước. Nó tìm điểm là tâm của đốm sáng mà IR camerachụp lại được và điểm tương đồng của đốm sáng đó trên mặt phẳng tham chiếu (vídụ: ta có A và B, C và B là các cặp điểm tương đồng), để tìm khoảng chênh lệch giữahai điểm này theo chiều ngang khi chiếu về trên mặt phẳng ảnh; và lưu ý là giá trịchênh lệch này được tính bằng đơn vị pixel. Tập hợp của tất cả các giá trị chênh lệchtừ tập hợp đốm sáng, sẽ tạo nên bản đồ độ chênh lệch (disparity map), giá trị nàycàng lớn thì khoảng cách hay giá trị độ sâu ảnh (depth) càng lớn, từ đó mà ta xâydựng được bản đồ độ sâu (depth map) với giá trị tính bằng mét thực sự. Tuy nhiên, do

Page 26: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

20

tập hợp số lượng đốm sáng phát đi từ projector nhỏ hơn so với tổng số pixel trên mặtphẳng ảnh của IR camera nên một phần giá trị độ sâu ảnh còn lại sẽ được nội suy.Theo tính toán của Nicolas Burrus [6], một trong những người mở đường cho việc tìmhiểu về Kinect qua các thí nghiệm của ông. Ông đã công thức hóa được quan hệ giữagiá trị khoảng cách thật z tính bằng mét và giá trị độ chênh lệch d:

z= . .Trong đó d là con số nguyên biểu diễn dưới dạng 11 bit, tức khoảng thay đổi từ0^2047. Với kết quả đo đạc thực nghiệm trên thư viện OpenNI, giá trị z biến thiêntrong khoảng 0.5^6.0 mét và bản đồ độ sâu ổn định trong khoảng 0.5^5.0 mét. Do đó,giá trị d thực sự biến thiên trong khoảng từ 434^1030. Như vậy, trong không gian từ0^0.5 mét phía trước Kinect, Kinect không thể đưa về bản đồ độ sâu, đây là mộtnhược điểm sẽ được khắc phục và đề cập đến trong chương 7.Một số đặc tính khácMột số đặc tính khác của Kinect đáng quan tâm: tiêu cự và góc mở camera (field ofview), nguồn cung cấp và công suất tiêu thụ, môi trường hoạt động. Kinect là sảnphẩm thương mại của Microsoft nên các thông số kỹ thuật chi tiết không được côngbố. Các thông số được trình bày dưới đây là kết quả đo đạc thực nghiệm:1.5.3 Tiêu cự, góc mở IR camera và RGB camera:

Hai camera RGB và IR được đặt cách nhau 2.5 cm nên có chút khác nhau ởkhung hình thu về từ hai camera. Để đảm bảo khung hình RGB có thể chứa đượckhung hình IR, người ta thiết kế góc mở của RGB camera lớn hơn. Điều này cũng dẫnđến tiêu cự của RGB camera nhỏ hơn. Các thông số trong bảng sau được đo đạcbằng thực nghiệm:

Feature RGBcamera IRcamera

Field of View (degrees) Horizontal ~62o ~58o

Vertical ~48o ~44o

Diagonal ~72o ~69o

Focal length (pixels) 525 580Bảng1.2: Góc mở và tiêu cự của RGB và IR camera

1.5.4 Nguồn cung cấp và công suất tiêu thụ:Vì Kinect cần nhiều điện năng để hoạt động nên cổng USB của Xbox-360 không thểđáp ứng mà phải qua một cổng chia để chia thành 2 kết nối riêng là USB và kết nốinguồn, giúp cho thiết bị kết nối với Xbox-360 bằng cổng USB trong khi nguồn điện cầncho Kinect là 12VDC được lấy từ adapter. Phiên bản Xbox-360 mới sẽ không cầnadapter vì nó có các AUX port đặc biệt để cung cấp cho cổng kết nối. Với kết nối USBta hoàn toàn có thể cho Kinect giao tiếp với máy tính.

Page 27: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

21

Hình 1.18: Kinect adapter1.5.5 Công suất tiêu thụ đo bằng thực nghiệm:

Power consumption (idle) ~3.3WPower consumption

(active)~4.7W

Bảng1.3: Công suất tiêu thụ trên Kinect1.5.6 Môi trường hoạt động

Kinect là thiết bị được thiết kế cho việc sử dụng ở môi trường trong nhà (indoor).Ở môi trường ngoài trời, kết quả thử nghiệm cho bản đồ độ sâu không chính xác vàothời điểm ánh sáng mạnh, nhưng cho kết quả chấp nhận được khi ánh sáng yếu (vàothời điểm buổi chiều tối).1.6 Thư viện OpenCVCó rất nhiều thư viện thị giác máy mã nguồn mở như đã giớ i thiệu ở trên, mỗi thư việncó một nét riêng c ủa nó mà chúng ta có thể khai thác. Ở đây tôi đặc biệt nghiên cứathư viện OpenCV c ủa Intel vì tính phổ biến và những khả năng của nó có thể phục vụcho công việc của tôi.1.6.1 Tổng quan về thư viện OpenCV

OpenCV là một thư viện thị giác máy tính mã nguồn mở của Intel nó có thể làmđơn giản hóa công việc lập trình thị giác máy tính của ban. OpenCV bao gồm nhiềukhả năng tiên tiến - tìm, theo dõi, nh ận dạng các bề mặt, lọc Kalman, là sự đa dạngcủa một hệ thống trí tuệ nhân tạo. Ngoài ra nó còn cung c ấp các cơ sở thuật toán thịgiác máy tính thông qua các giao diện lập trình ứng dụng ở mức thấp. Nó được đónggói và hoàn toàn miễn phí, người dùng có thể sẵn sàng sử dụng cho những mục đíchkhác nhau của họ.

Intel đưa ra phiên bản OpenCV đầu tiên vào năm 1999. Ban đầu, nó chỉ là thưviện xử lý ảnh của Intel. Về sau, tính lệ thuộc đó đã được lo ại bỏ và bây giờ bạn cóthể sử dụng OpenCV như một thư viện độc lập. OpenCV là một thư viện đa nền tảng,nó chấp nhận cả Window và Linux, hơn thế nữa gần đây là Mac OSX.1.6.2 Những khả năng của OpenCVOpenCV có nhiều chức năng, sau đây là tóm tắt các chức năng của nó:

Ảnh và vào ra video Các giao diện này cho phép bạn đọc dữ liệu ảnh từ các tệp ho ặc từ các video

Page 28: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

22

sống. Bạn cũng có thể tạo file ảnh và video. Thị giác máy tính nói chung và các giải thuật xử lý ảnh (APIs mức thấp vàtrung

bình) Sử dụng các giao diện này, bạn có thể thí nghiệm vớ i nhiều thuật toán thị giác

nhân tạo chuẩn mà bạn không cần viết code về chúng. Chúng bao gồm sự dòtìm viền, đường thẳng và góc, điều chỉnh elip, lấy mẫu và những biến đổi khácnhau (Furiê rờ i rạc, cosin rờ i rạc và các biến đổi khoảng cách), v.v.

Những module thị giác máy ở mức cao OpenCV bao gồm vài khả năng ở mức cao. Ngoài việc dò tìm, nhận dạng và

theo dõi khuôn mặt nó còn bao gồm cả luồng quang hoc (sử dụng sự di chuyểnđộng của camera để xác định cấu trúc 3D), định cỡ camera và hình khối.

Các giải thuật trí tuệ nhân tạo và dạy học máy Các ứng dụng thị giác máy tính thường đòi hỏi các phương pháp dạy học máy

ho ặc trí tuệ nhân tạo (AI) khác. Một vài trong số chúng sẵn có trong gói dạy họcmáy của OpenCV.

Lấy mẫu ảnh và các biến đổi khung nhìn Nó thường có ích để xử lý một tập điểm như một khổ i. OpenCV bao gồm giao

diện cho những sự phân miền sao chép ảnh, xử lý ngẫu nhiên, hồi phục kíchthước yêu cầu, làm vênh, quay và s ử dụng những hiệu ứng phối cảnh.

Các phương pháp tạo và phân tích ảnh nhị phân Ảnh nhị phân thường xuyên được s ử dụng trong các hệ thống quét để kiểm tra

khuyết điểm hình dạng hay đểm các bộ phận của vật. Thao tác với ảnh 3D Các chức năng này có ích cho phép ánh xạ và sự xác định vị trí - hay vớ i thiết

bị vật thể ho ặc với nhiều dạng phép chiế từ một camera đơn. Các thuật toán xử lý ảnh, thị giác máy và hiển thị ảnh OpenCV bao gồm cả toán học cũ, các thuật toán đại số tuyến tính, khoa học

thống kê và hình học tính toán. Đồ họa Các giao diện này cho phép b ạn viết chữ và vẽ trên ảnh. Thêm vào các hàm

khác nhau và khả năng sáng tạo, các hàm này có ích cho s ự ghi nhãn và đánhdấu. Ví dụ, nếu bạn viết một chương trình dò tìm đối tượng, nó giúp ích cho cácảnh nhãn về kích thước và vị trí của chúng.

1.6.3 Cấu tạo của OpenCVChức năng của OpenCV được chứa trong các module khác nhau:

- CXCORE chứa các định nghĩa kiểu dữ liệu cơ sở. Ví dụ, các cấu trúc dữ liệucho ảnh, điểm và hình chữ nhật được định nghĩa trong cxtypes.h. CXCOREcũng chứa đại số tuyến tính và phương pháp thống kê, chức năng duy trì vàđiều khiển chuỗi. Một số ít, các chức năng đồ họa để vẽ trên ảnh cũng được đặtở đây.

- CV chứa các thuật toán về xử lý ảnh và định kích cỡ camera. Các chức năng

Page 29: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

23

hình họa máy tính cũng được đặt ở đây.- CVAUX được mô tả trong tài liệu của OpenCV như chứa các mã cũ và thứ

nghiệm. Tuy nhiên, các giao diện đơn cho sự nhận diện ảnh ở trong modulenày. Code sau này chúng được chuyên dụng cho nhận diện mặt và chúng đượcứng dụng rộng rãi cho mục đích đó.

- Highgui và CVCAM được đặt trong cùng thư mục là “otherlibs”. Highgui chứacác giao diện vào ra cơ bản, nó cũng chứa các khả năng cửa sổ mở rộng vàvào ra video.

- CVCAM chứa các giao diện cho video truy cập qua DirectX trên nền Windows32 bits.

1.7 Thư viện hỗ trợ KinectNgay khi mới ra đời, Kinect đã được quan tâm bởi rất nhiều nhà phát triển phần

mềm, không chỉ trên mảng phát triển game cho Xbox mà còn trên mảng xử lý ảnh ứngdụng trong y học, robot, mapping... Do đó mà nhiều thư viện được viết cho Kinect rađời. Cho đến thời điểm hiện tại, các thư viện đáng chú ý là Libfreenect, CodeLaboratories Kinect, OpenNI và Kinect SDK beta.1.7.1 Libfreenect:

Libfreenect là thư viện được phát triển bởi OpenKinect, do một cộng đồng nhữngngười quan tâm đến phần cứng Kinect viết ra và chia sẻ. Cộng đồng OpenKinect làmviệc hoàn toàn tự nguyện và không vì mục đích lợi nhuận, họ phát triển Libfreenectthành một mã nguồn mở cho các hệ điều hành khác nhau Windows, Linux và OS X.Hiện tại, Libfreenect được đóng gói cho việc sử dụng trên Python, C, C++, C#, JavaJNI, Java JNA, Javascript.1.7.2 Code Laboratories Kinect:

Code Laboratories (CL) là một công ty về phần mềm chuyên hỗ trợ các nhàpháttriển, lập trình viên khai thác các tính năng của các thiết bị xử lý ảnh. Trong số đóKinect không phải là ngoại lệ, CL cung cấp cho người sử dụng những tính năng cơbản nhất của Kinect về camera, audio và motor.1.7.3 OpenNI:

Thư viện OpenNI [9] được xem là thư viện mạnh nhất trước sự có mặt của KinectSDK beta, thư viện này hỗ trợ đa ngôn ngữ trên nhiều platform khác nhau, giúp chocác lập trình viên có thể viết các ứng dụng trên Kinect rất dễ dàng với tương tác tựnhiên Natural Interaction (NI). Mục đích chính của OpenNI là xây dựng các hàm APIchuẩn, cho phép thư viện có khả năng kết hợp với các middleware nhằm làm tăngsức mạnh cho Kinect.1.7.4 Kinect SDK beta:

Kinect SDK [10] beta được Microsoft đưa ra vào ngày 16 tháng 6 năm 2011, làmột công cụ lập trình mạnh cho các nhà phát triển. Nó cho phép lập trình viên truyxuất toàn bộ tính năng của thiết bị Kinect. Một điều bất tiện là thư viện này chỉ hỗ trợtrên công cụ lập trình của Microsoft là Visual Studio 2010 với các ngôn ngữ là C++,C# và Visual Basic. Các tính năng nổi bật như: thu ảnh từ các sensor, skeleton

Page 30: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

24

tracking và điều khiển bằng giọng nói thông qua công cụ nhận biết giọng nói,Windows Speech Recognition API. Phiên bản beta hiện tại chỉ cho phép sử dụng vàonhững mục đích phi lợi nhuận, phiên bản thương mại hứa hẹn sẽ sớm ra mắt trongnăm 2012. Phiên bản beta mới nhất được cập nhật vào ngày 1 tháng 11 năm 2011với nhiều lỗi được sửa và chạy tốt trên Windows S Developer Preview.

Tới thời điểm hiện tại, hai thư viện OpenNI và Kinect SDK beta là lựa chọn sángsuốt cho việc lập trình trên Kinect bởi tính năng hỗ trợ mạnh mẽ của hai thư viện này.Mục S.2 sẽ phân tích và so sánh hai thư viện này và chọn lựa thư viện phù hợp chođề tài.1.7.5 Point Cloud Library

Hình 1.19: Point cloud library logoPCL là thư viện hỗ trợ cho n-D Point Cloud và cho việc xử lý ảnh trong không

gian 3D. Thư viện được xây dựng với nhiều giải thuật 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),... PCL có thể dùng trên nhiều platform như Linux, MacOS,Windows và Android. Để đơn giản cho việc phát triển, PCL được chia ra thành nhiềuthư viện nhỏ và có thể biên dịch một cách riêng lẻ. Phiên bản mới nhất là PCL 1.3đưa ra vào ngày 31 tháng 10 năm 2011. PCL hoàn toàn miễn phí cho việc nghiên cứuhay phát triển các sản phẩm thương mại hóa.

Có thể nói PCL là sự kết hợp của nhiều module nhỏ. Những module này thựcchất cũng là các thư viện thực hiện các chức năng riêng lẻ trước khi được PCL đónggói. Các thư viện cơ bản này là:

Eigen: một thư viện mở hỗ trợ cho các phép toán tuyến tính, được dùngtrong hầu hết các tính toán toán học của PCL.

FLANN: (Fast Library for Approximate Nearest Neighbors) hỗ trợ cho việctìm kiếm nhanh các điểm lân cận trong không gian 3D.

Boost: giúp cho việc chia sẻ con trỏ trên tất cả các module và thuật toántrong PCL để tránh việc sao chép trùng lặp dữ liệu đã được lấy về trong hệthống.

VTK: (Visualization Toolkit) hỗ trợ cho nhiều platform trong việc thu về dữliệu 3D, hỗ trợ việc hiển thị, ước lượng thể tích vật thể.

CMinPack: một thư viện mở giúp cho việc giải quyết các phép toán tuyếntính và không

Page 31: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

25

2 Chương 2: Nội dung nghiên cứuNội dung nghiên cứu của đề tài bao gồm:- Tìm hiểu các thuật toán nhận dạng đối tượng sử dụng đặc trưng bất biến, trong đó

trọng tâm là thuật toán SIFT.- Thực hiện cài đặt thuật toán SIFT và xây dựng chương trình nhận dạng đối tượng

sử dụng SIFT.2.1 Tổng quan về SIFT

Một thuật toán tiêu biểu và có hiệu quả khá cao là dựa theo các đặc trưng cục bộbất biến trong ảnh: SIFT (Scale-invariant Feature Transform) do David Lowe đưa ra từnăm 2004 và đến nay đã có nhiều cải tiến trong thuật toán. Đặc trưng được trích chọntrong SIFT là các điểm đặc biệt (keypoint), các điểm này kèm theo các mô tả về nó vàmột véc tơ có lấy keypoint làm điểm gốc.

Có bốn giai đoạn chính được thực hiện trong thuật toán để trích xuất các điểmđặc biệt và các đặc trưng của nó bao gồm:

Dò tìm cực trị trong không gian đo (Scale-space Extrema Detection):Bướcđầu tiên này sẽ áp dụng hàm sai khác Gaussian (DoG - Deffirence of Gaussisan) đểtìm ra các điểm có khả năng làm điểm đặc trưng tiềm năng (candidate keypoints), đólà những đểm rất ít phụ thuộc (bất biến) vào sự thu phóng ảnh và xoay ảnh.

Lọc và trích xuất các điểm đặc biệt (Keypoint localization):Từ những điểmtiềm năng ở trên sẽ lọc và lấy ra tập các điểm đặc trưng tốt nhất (keypoints).

Gán hướng cho các điểm đặc trưng (Oriented Assignment):Mỗi điểm đặctrưng sẽ được gán cho một hoặc nhiều hướng dựa trên hướng gradient của ảnh. Mọiphép toán xử lý ở các bước sau này sẽ được thực hiện trên những dữ liệu ảnh mà đãđược biến đổi tương đối so với hướng đã gán, kích cỡ và vị trí của mỗi điểm đặctrưng. Nhờ đó, tạo ra một sự bất biến trong các phép xử lý này.

Bộ mô tả điểm đặc trưng (Keypoint Description):Các hướng gradient cục bộđược đotrong ảnh có kích cỡ cụ thể nào đó trong vùng lân cận với mỗi điểm đặctrưng. Sauđó, chúng sẽ được biễu diễn thành một dạng mà cho phép mô tả các tầngquan trọngcủa quá trình bóp méo hình dạng cục bộ và sự thay đổi về độ sáng.

Tập các điểm đặc biệt thu được thường phụ thuộc rất ít vào các phép biến đổi cơbản như xoay, phóng to, thu nhỏ, tăng giảm cường độ sáng, vì vậy có thể xem đây làcác đặc trưng mang tính cục bộ của ảnh. Để đối sánh và nhận dạng hai ảnh thì ta tìmtập keypoint giống nhau trong hai ảnh, dựa vào hướng và tỉ lệ để có thể biết đối tượngtrong ảnh gốc đã xoay, thu phóng bao nhiêu so v ới ảnh đem đối sánh. Cách tiếp cậncủa thuật toán này dựa vào điểm bất biến cục bộ của ảnh, chúng được trích xuất ra,được định hướng và mô tả sao cho hai keypoint ở hai vùng khác nhau thì khác nhau.Tuy nhiên một yếu tố ảnh hưởng không nhỏ đế n tốc độ thuật toán là số lượng cáckeypoint được lấy ra là không nhỏ. Trung bình một ảnh kích thước 500 x 500 pixelsthì sẽ trích xuất được khoảng 1000 điểm (số lượng điểm này phụ thuộc vào tùy từngảnh và tham số lọc khác nhau). Số lượng các điểm đặ c trưng có một tầm quan trọngtrong vấn đề nhận dạng đối tượng, để nhận dạng một đối tượng nhỏ trong một ảnh

Page 32: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

26

chứa tập hợp các đối tượng hỗn độn thì cần ít nhất 3 điểm đặc trưng giống nhau đểphát hiện và và bóc tách đối tượng.

Đối với vấn đề xây dựng một cơ sở dữ liệu ảnh và thực hiện nhận dạng đốitượng bất kì thì ban đầu thường sử dụng SIFT để tạo một hệ dữ liệu các đặc trưng(keypoints) được trích xuất từ dữ liệu ảnh gốc. Sau đó với m ỗi ảnh đối tượng đemnhận dạng ta dùng giải thuật SIFT trích xuất tập đặc trư ng từ ảnh và đem đối sánhvới hệ dữ liệu đặc trưng để tìm ra tập keypoint giống nhau, từ đó nhậ n dạng đốitượng trong cơ sở dữ liệu ảnh ban đầu. Tuy nhiên việc đối sánh này cần chi phí đốisánh rất lớn đối với cơ sở dữ liệu ảnh có số lượng lớn do số lượng các đặc trưng ởmỗi ảnh là lớn.

2.2 Nội dung giải thuật2.2.1 Dò tìm cực trị cục bộ

Như đã nêu ở trên, bước đầu tiên sẽ tìm các điểm tiềm năng có thể trở thànhđiểm đặc trưng bằng phương pháp lọc theo tầng dựa vào việc thay đổi tham số bộ lọcGaussisan. Trong bước này, ta cần dò tìm các vị trí và các số đo (kích cỡ) mà chúngbất biến trong các khung nhìn khác nhau của cùng một đối tượng. Các vị trí đó bấtbiến về số đo có thể được dò tìm bằng cách tìm kiềm các đặc trưng ổn định trên toànbộ các số đo có thể, sử dụng một hàm liên tục về số đo vốn rất nổi tiếng có tên là hàmkhông gian đo (Witkin 1983).

Theo các công bố của Koenderink (1984) và Lindeberg(1994) thì hàm Gaussianlà hàm tốt nhất để biễu diễn không gian đo của ảnh 2 chiều. Vì vậy, không gian đocủa một ảnh sẽ được định nghĩa như là một làm L(x,y,ó) được tạo ra bằng cách nhânchập ảnh gốc I(x,y) với môt hàm Gaussian G(x,y,ó) có tham số về số đo ó thay đổi.

Hình 2.1: Minh họa các bước chính trong giải thuật SIFT

Page 33: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

27

Trong đó toán hạng * là phép nhân chập các ma trận 2 chiều x,y. Và G(x,y, ó) hàmGaussian:

Để tìm những điểm đặc trưng có tính bất biến cao, thuật toán được sử dụng làtìm cực trị cục bộ của hàm sai khác DoG (Difference-of-Gaussian), kí hiệu là D(x,y,ó ).Hàm này được tính toán từ sự sai khác giữa 2 không gian đo cạnh nhau của một ảnhvới tham số đo lệch nhau một hằng số k.

Các lý do lựa chọn hàm Gaussian là vì nó là kỹ thuật rất hiệu quả để tính toán L (cũngnhư làm tăng độ mịn của ảnh), mà L thì luôn phải được tính rất nhiều để mô tả đặctrưng trong không gian đo, và sau đó, D sẽ được tính một cách đơn giản chỉ với phéptrừ ma trận điểm ảnh với chi phí thực hiện thấp.

Hình 2.2. Quá trình tính không gian đo (L) và hàm sai khác DHơn nữa, hàm sai khác DoG có thể được sử dụng để tạo ra một sự xấp xỉ gần

với đạo hàm bậc hai Laplace có kích thước chuẩn của hàm Gaussian (ó2V2G) do tácgiả Lindeberg đề xuất năm 1994. Ông đã chỉ ra rằng việc chuẩn hóa đạo hàm bậc haivới hệ số ó2 là cần thiết cho bất biến đo trở nên đúng. Cụ thể, ông đã công bố rằngcác giá trị cực đại và cực tiểu của ó2V2G chính là những giá trị có tính ổn định nhất(bất biến cao) so với một loạt các hàm đánh giá khác như:gradient, Hessian hayHarris.

Mối quan hệ giữa D và ó2V2G được biễu diễn như sau:

Page 34: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

28

Do đó:Từ công thức này, ta thấy khi mà hàm sai khác DoG được tính toán tại các tham

số đo lệch nhau một hằng số k, thì ta có thể sử dụng DoG để xấp xỉ đạo hàm bậc haiLaplace của Gaussian. Vì hệ số (k-1) trong phương trình trên là hằng số trong mọikhông gian đo nên nó sẽ không ảnh hưởng đến việc tìm các vị trí cực trị. Sai số trongviệc xấp xỉ đạo hàm bậc 2 tiến về 0 khi k gần với 1. Tuy nhiên, các kết quả thửnghiệmcủa tác giả cho thấy quá trình xấp xỉ đạo hàm không ảnh hưởng đến việc dò

tìm các vị trí cực trị thậm chí ngay cả khi chọn k khá xa, ví dụSau khi áp dụng hàm DoG ta thu được các lớp kết quả khác nhau (scale) từ ảnh

gốc, bước tiếp theo là tìm các cực trị trong các lớp kết quả theo từng miền cục bộ. Cụthể là tại mỗi điểm trên các lớp kết quả sẽ được so sánh với 8 điểm lân cận trên cùnglớp và 9 điểm lân cận trên mỗi lớp khác (hình dưới).

Hình 2.3 Quá trình tìm điểm cực trị trong các hàm sai khác DoGTrong hình trên: điểm đánh dẫu x sẽ được so sánh với 26 điểm lân cận (đánh

dấu vòng tròn xanh). Điểm này sẽ được lấy làm điểm tiềm năng (điểm có thể làmđiểm đặc biệt - candidate keypoint) nếu nó có giá trị lớn nh ất hoặc nhỏ nhất so với 26điểm lân cận như trên. Giải pháp cho việc tìm các điểm tiềm năng này là sử dụngthuật toán blob detection (dò tìm điểm) do Lindeberg đề xuất.

Vì số lượng các cực trị là rất lớn, vì vậy để tăng sự hiệu quả khi dò tìm các điểmcực trị (dò các điểm cực trị tốt nhất thay vì phải dò hết), ta cần xác định tần số lấy mẫutrong không gian đo và tần số lấy mẫu trong không gian quan sát (không gian ảnh).Thật không may là ta không thể xác định cả 2 loại tần số này một cách động trong mỗitiến trình dò tìm. Thay vì vậy, các tần số này sẽ được xác định offline thông quaphương pháp thử nghiệm. Sau khi thử nghiệm với nhiều nguồn dữ liệu ảnh khácnhau, tác giả đã chỉ ra tần số lấy mẫu trong không gian đo tốt nhất là 3 (giữ lại 3 lớp

Như vậy, V2G có thể được tính thông qua việc xấp xỉ sự sai khác hữu hạn ỒG, dơtạjcác tham số đo gần nhau kó và ó:

Page 35: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

29

trong mỗi bộ 8 lớp), và tần số lấy mẫu ó = 1.6.2.2.2 Trích xuất keypoint

Sau bước 1 sẽ thu được rất nhiều điểm tiề m năng có thể làm điểm đặc biệt, tuynhiên một số trong chúng là không cần thiết. ở bước tiếp theo này sẽ loại bỏ các điểmcó độ tương phản kém (nhạy cảm với nhiễu) hoặc tính đặc trưng cục bộ ít hơn cácđiểm khác hoặc có xu hướng là đường biên đối tượng. Bước thực hiện này gồm 3công đoạn:

a. Phép nội suy lân cận cho vị trí đúng của điểm tiềm năng:Phép nội suy lân cận () sử dụng mở rộng Taylor (Taylor expansion) cho hàm

Difference-of-Gaussian D(x,y,ó):

Trong đó: D và đạo hàm của nó được tính tại một điểm tiềm năng và X =(x,y,ó) là khoảng cách từ điểm đó. Vị trí của điểm cực trị X được xác định bằng cáchlấy đạo hàm của hàm trên với đối số X và tiến dần đến 0:

Hình 2.4: Mô phỏng sử dụng công thức mở rộng của Taylor cho hàm DoG

Nếu X > 0.5 theo một chiều nào đó thì nó có chỉ số cực trị không gần vớicác điểm tiềm năng khác, nó sẽ bị thay đổi và phép nội suy sẽ thay thế vai trò củanó bằng điểm khác gần nó.

Page 36: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

30

Hình 2.5. Minh họa các bước của quá trình lựa chọn các điểm keypoints. (a) làảnh gốc. (b) mô tả 832 điểm keypoints tìm được, các điểm keypoints được vẽ ởdạng một vector thể hiện 3 thông tin: vị trí, hướng và độ dài. (c) sau khi đặtngưỡng tương phản tổi thiểu, ta giữ lại được 729 điểm. (d) Giữ lại 536 điểm saukhi áp một ngưỡng nữa về hệ số độ cong.

b. Loại trừ các điểm có tính tương phản kém:Các điểm nhạy cảm với độ sáng và nhiễu thì không được trở thành điểm đặc biệt

và cần loại bỏ khỏi danh sách điểm tiềm năng. Trong khai triển Taylor mở rộng ở trên,nếu điểm tiềm năng nào có giá trị X < 0.03 thì điểm đó sẽ bị loại, ngược lại thì nóđược giữ lại theo vị trí mới (y+x) và tùy biến ó, với y là vị trí cũ của nó cùng giá trị biếnó.

c. Loại bỏ các điểm dư thừa theo biên:Sử dụng hàm DoG sẽ cho tác động mạnh đến biên khi vị trí của biên là khó xác

định và vì vậy các điểm tiềm năng trên biên sẽ không bất biến và bị nhiễu. Và để tăngsự ổn định cho các điểm sẽ được chọn làm điểm đặc biệt ta sẽ loại trừ các điểm tiềmnăng khó định vị (tức là vị trí dễ thay đổi khi có nhiễu do nằm ở biên).

Sau khi áp dụng hàm DoG sẽ làm đường biên ảnh không rõ ràng và độ congchính sẽ có giá trị lớn hơn nhiều so với độ cong dọc theo biên vì vậy cần loại bỏ bớtcác điểm đặc biệt dọc theo cùng một biên. Giải pháp cho việc này là sử dụng giá trịcủa ma trận Hessian cấp 2:

(2.2.3)Các giá trị riêng của H tỉ lệ thuận với độ cong của D, các giá trị riêng â (giá trị

nhỏ) và á (giá trị lớn) có tỉ lệ r = á/â sẽ được sử dụng. Các phần tử của H là Dxx vàDyy2.2.3 Gắn hướng cho các keypoint

Bằng việc gán một hướng cho mỗi điểm đặc trưng keypoint dựa vào các thuộctính ảnh cục bộ, bộ mô tả keypoint có thể được biễu diễn tương đối so với hướng nàyvà do đó đặt được tính bất biến đối với các hiện tượng quay ảnh. Cách tiếp cận nàyngược lại với các bộ mô tả bất biến hướng của Schmid (1997) ở chỗ mỗi thuộc tínhảnh sẽ dựa vào một độ đo bất biến về hướng. Nhược điểm của cách tiếp cận này đólà nó giới hạn số lượng các bộ mô tả được sử dụng và bỏ qua các thông tin về ảnhbởi vì nó không yêu cầu mọi độ đo đều phải dựa trên một hướng nhất quán.

Sau đây là kỹ thuật gán hướng cục bộ cho các điểm đặc trưng. Độ đo của cácđiểm đặc trưng được sử dụng để tìm ra một ảnh đã lọc Gaussian L với kích thước gầnnhất sao cho mọi tính toán sẽ được thực hiện trong cùng một cách bất biến về độ đo.Với mỗi mẫu ảnh L(x,y) này, gọi m(x,y) là biên độ gradient, 9 (x,y) là hướng. Hai giá trịcuối được tính toán như sau:

Page 37: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

31

2.2.4 Tạo bộ mô tả cục bộCác phép xử lý trên đây đã thực hiện dò tìm và gán tọa độ, kích thước, và hướng

cho mỗi điểm đặc trưng keypoint. Các tham số đó yêu cầu một hệ thống tọa độ địaphương 2D có thể lặp lại được để mô tả vùng ảnh địa phương và nhờ vậy tạo ra sựbất biến đối với các tham số đó. Bước tiếp theo đây sẽ tính toán một bộ mô tả chomôt vùng ảnh địa phương mà có tính đặc trưng cao (bất biến với các thay đổi khácnhau về độ sáng, thu - phóng ảnh, xoay).

Một cách tiếp cận đơn giản đó là lấy mẫu mật độ ảnh cục bộ lân cận điểm đặctrưng ở một độ đo thích hợp, và đối sánh các mật độ này sử dụng độ đo tương quanchuẩn. Tuy nhiên, hê số tương quan đơn giản thì lại rất nhạy cảm với sự thay đổi màgây ra sự đăng ký nhầm các mẫu, chẳng hạn nh ư các biến đổi Affine, phối cảnh 3D,hoặc bóp méo mềm. Cách tiếp cận tốt hơn nhiều được đưa ra bởi Edelman, Intratorvà Poggio (1997). Cách tiếp cận này dựa trên một mô hình thị giác sinh học, cụ thể làmô hình noron phức tạp trong hệ thống não bộ. Các noron sẽ tương ứng với mộtgradient tại một hướng và tần số không gian cụ thể, như ng vị trí của gradient trênvõng mạc được phép trượt trên một phạm vi nhỏ của khung nhìn. Dựa trên cách tiếpcận này, tác giả đã cài đặt bộ mô tả mới trong đó cho phép việc trượt vị trí sử dụngmột cách tính toán khác.

Hình sau mô phỏng quá trình tính toán các bộ mô tả theo cách tiếp cận mới.

Ảnh trái là mô phỏng biên độ gradient và h ướng tại m ỗi mẫu ảnh trong một vùnglân cận với điểm keypoint. Các giá trị đó tập trung trong một cửa sổ gaussian (nằmbên trong vòng tròn). Các mẫu này sau đó được gom lại thành một lược đồ hướng môtả vắn tắt nội dung trong 4x4 vùng con như được mô tả ở bên phải với độ dài của mỗihàng tương ứng với tổng biên độ gradient gần hướng đó bên trong một vùng.

Keypoint descriptor

Hình2.6: Mô tả tạo bộ mô tả cục bộ

[mage gradients

Page 38: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

32

2.3 Mô tả xây dựng chương trình xác định vị trí đối tượng2.3.1 Phương pháp thực hiện

Xây dựng chương trình phát hiện và định vị trí đối tượng bằng cách sử dụngcác kĩ thuật xử lý ảnh. Chương trình thực hiện tìm đối tượng, nếu tìm thấy sẽ ra lệnhđiều khiển thiết bị bên dưới thông qua cổng RS32 tiến lại gần vật.

Trong chương trình chúng tôi sử dụng thư viện OpenCV trong xử lý ảnh và tríchxuất keypoint của đối tượng bằng thuật toán SIFT. Sau đó chiết xuất trích lọc keypointvà descriptor của từng frame hình được định vị. Tiếp theo chương trình sẽ so sánhcác điểm keypoint lần cận để tìm thấy những cặp keypoint phù hợp nhất. Và nếuchúng phù hợp với nhau thì sẽ trả về tọa độ x,y của đối tượng. Với phương pháp này,chúng tôi chia màn hình ra làm 9 phần tương ứng như hình sau:

Hình 2.7. Mô tả việc chia màn hình ra làm 9phần để định vị vị trí đối tượng

Phần điều khiển thiết bị bến dưới sử dụng các thuật toán điểu khiển thiết bịđược mã hóa sao cho robot di chuyển đến đúng tọa độ của đối tượng được phát hiệnlà khu vực số 5. Nếu tọa độ phát hiện trong khu vực 6, thì robot sẽ di chuyển sangbên phải, đối tượng sẽ xuất hiện trong khu vực 5. Nếu đối tượng rơi vào khu vực 2,robot sẽ di chuyển về phía trước để đưa đối tượng rơi vào khu vực 5. Khi đối tượnglọt vào khu vực 5, nếu robot có cách tay bắt lấy đối tượng thì cách tay sẽ đưa ra kẹplấy đối tượng. Khi đó, robot sẽ di chuyển về phía trước để kẹp chặc đối tượng. Tronglúc robot tiến về phía trước sẽ sử dụng kinect để đo khoảng cách đến đối tượng saocho khoảng cách đúng với thiết kết của cánh tay robot để bắt lấy đối tượng.

Các tính hiệu điều khiển từ máy tính sẽ gửi đến các vi điều khiển AVR thôngqua cổng USB hoặc cổng serial RS32 với thiết bị kết nối tiếp vào interface. Sử dụnglệnh “echo” thông qua lời gọi hệ thống trong C vào cổng nối tiếp ttyUSB0. Các vi điềukhiển AVR, khi nhận được lệnh từ máy tính, các động cơ và cánh tay sẽ hoạt động.2.3.2 Mã chương trình nhận dạng đối tượng#include <stdlib.h>#include <stdio.h>#include <math.h>#include <string.h>#include <stdio.h>#include "libfreenect.h"

Page 39: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

33

#include "libfreenect_sync.h"//#include "libfreenect_cv.h"

#include <opencv2/objdetect/objdetect.hpp>#include <opencv2/features2d/features2d.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/calib3d/calib3d.hpp>#include <opencv2/imgproc/imgproc_c.h>#include <opencv2/video/tracking.hpp>

#include <iostream>#include <vector>using namespace std;IplImage *image = 0;

double compareSURFDescriptors( const float* d1, const float* d2, double best, intlength ){double total_cost = 0;assert( length % 4 == 0 );for( int i = 0; i < length; i += 4 ){double t0 = d1[i] - d2[i];double t1 = d1[i+1] - d2[i+1];double t2 = d1[i+2] - d2[i+2];double t3 = d1[i+3] - d2[i+3];total_cost += t0*t0 + t1*t1 + t2*t2 + t3*t3;if( total_cost > best )break;}return total_cost;}int naiveNearestNeighbor( const float* vec, int laplacian, const CvSeq*model_keypoints, const CvSeq* model_descriptors ){int length = (int)(model_descriptors->elem_size/sizeof(float));int i, neighbor = -1;double d, dist1 = 1e6, dist2 = 1e6;CvSeqReader reader, kreader;cvStartReadSeq( model_keypoints, &kreader, 0 );cvStartReadSeq( model_descriptors, &reader, 0 );

Page 40: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

34

for( i = 0; i < model_descriptors->total; i++ ){const CvSURFPoint* kp = (const CvSURFPoint*)kreader.ptr;const float* mvec = (const float*)reader.ptr;CV_NEXT_SEQ_ELEM( kreader.seq->elem_size, kreader );CV_NEXT_SEQ_ELEM( reader.seq->elem_size, reader );if( laplacian != kp->laplacian )continue;d = compareSURFDescriptors( vec, mvec, dist2, length );if( d < dist1 ){dist2 = dist1;dist1 = d;neighbor = i;}else if ( d < dist2 )dist2 = d;}if ( dist1 < 0.6*dist2 )return neighbor;return -1;}

void findPairs( const CvSeq* objectKeypoints, const CvSeq* objectDescriptors, constCvSeq* imageKeypoints, const CvSeq* imageDescriptors, vector<int>& ptpairs ){int i;CvSeqReader reader, kreader;cvStartReadSeq( objectKeypoints, &kreader );cvStartReadSeq( objectDescriptors, &reader );ptpairs.clear();

for( i = 0; i < objectDescriptors->total; i++ ){const CvSURFPoint* kp = (const CvSURFPoint*)kreader.ptr;const float* descriptor = (const float*)reader.ptr;CV_NEXT_SEQ_ELEM( kreader.seq->elem_size, kreader );CV_NEXT_SEQ_ELEM( reader.seq->elem_size, reader );int nearest_neighbor = naiveNearestNeighbor( descriptor, kp->laplacian,imageKeypoints, imageDescriptors );

Page 41: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

35

if( nearest_neighbor >= 0 ){ptpairs.push_back(i);ptpairs.push_back(nearest_neighbor);}}}

/* a rough implementation for object location */int locatePlanarObject( const CvSeq* objectKeypoints, const CvSeq*objectDescriptors, const CvSeq* imageKeypoints, const CvSeq* imageDescriptors,const CvPoint src_corners[4], CvPoint dst_corners[4] ){double h[9];CvMat _h = cvMat(3, 3, CV_64F, h);vector<int> ptpairs;vector<CvPoint2D32f> pt1, pt2;CvMat _pt1, _pt2;int i, n;findPairs( objectKeypoints, objectDescriptors, imageKeypoints, imageDescriptors,ptpairs );n = (int)(ptpairs.size()/2);if( n < 4 )return 0;

pt1.resize(n);pt2.resize(n);for( i = 0; i < n; i++ ){pt1[i] = ((CvSURFPoint*)cvGetSeqElem(objectKeypoints,ptpairs[i*2]))->pt;pt2[i] = ((CvSURFPoint*)cvGetSeqElem(imageKeypoints,ptpairs[i*2+1]))->pt;}

_pt1 = cvMat(1, n, CV_32FC2, &pt1[0] );_pt2 = cvMat(1, n, CV_32FC2, &pt2[0] );if( !cvFindHomography( &_pt1, &_pt2, &_h, CV_RANSAC, 5 ))return 0;

for( i = 0; i < 4; i++ ){double x = src_corners[i].x, y = src_corners[i].y;

Page 42: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

36

double Z = 1./(h[6]*x + h[7]*y + h[8]);double X = (h[0]*x + h[1]*y + h[2])*Z;double Y = (h[3]*x + h[4]*y + h[5])*Z;dst_corners[i] = cvPoint(cvRound(X), cvRound(Y));}

return 1;}//////////IplImage *freenect_sync_get_depth_cv(int index){static IplImage *image = 0;static char *data = 0;if (!image) image = cvCreateImageHeader(cvSize(640,480), 16, 1);unsigned int timestamp;if (freenect_sync_get_depth((void**)&data, &timestamp, index,FREENECT_DEPTH_11BIT))return NULL;cvSetData(image, data, 640*2);return image;}

IplImage *freenect_sync_get_rgb_cv(int index){static IplImage *image = 0;static char *data = 0;if (!image) image = cvCreateImageHeader(cvSize(640,480), 8, 3);unsigned int timestamp;if (freenect_sync_get_video((void**)&data, &timestamp, index,FREENECT_VIDEO_RGB))return NULL;cvSetData(image, data, 640*3);return image;}

int ConnectKinect(void){while (cvWaitKey(10) < 0) {IplImage *image = freenect_sync_get_rgb_cv(0);if (!image) {printf("Error: Kinect not connected?\n");

Page 43: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

37

return -1;}cvCvtColor(image, image, CV_RGB2BGR);IplImage *depth = freenect_sync_get_depth_cv(0);if (!depth) {printf("Error: Kinect not connected?\n");return -1;}cvShowImage("RGB", image);//cvShowImage("Depth", GlViewColor(depth));}return 0;}/////////int main(int argc, char** argv){const char* object_filename = "a1.png"; // input image to be detected

int key=0;

//int sy;//sy=system("stty -F /dev/ttyUSB0 cs8 115200 ignbrk -brkint -icrnl -imaxbel -opost -

onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoe -noflsh -ixon");CvMemStorage* storage = cvCreateMemStorage(0);cvNamedWindow("Object Correspond", 1);

static CvScalar colors[] ={{{0,0,255}},{{0,128,255}},{{0,255,255}},{{0,255,0}},{{255,128,0}},{{255,255,0}},{{255,0,0}},{{255,0,255}},{{255,255,255}}};

//CvCapture* capture = cvCreateCameraCapture(0);CvMat *image = 0;//, *gray =0;//* prevgray = 0,

Page 44: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

38

while( key != 'q' ){int gray = 0;//firstFrameIplImage* frame = freenect_sync_get_rgb_cv(0);//cvQueryFrame(capture);//cvCvtColor(image, image, CV_RGB2BGR);if(!frame)break;if(!gray){image = cvCreateMat(frame->height, frame->width, CV_8UC1);}cvCvtColor(frame, image, CV_BGR2GRAY);CvSeq *imageKeypoints = 0, *imageDescriptors = 0;int i;

//Extract SURF points by initializing parametersCvSURFParams params = cvSURFParams(500, 1);cvExtractSURF( image, 0, &imageKeypoints, &imageDescriptors, storage, params );IplImage* object = cvLoadImage( object_filename, CV_LOAD_IMAGE_GRAYSCALE );

IplImage* object_color = cvCreateImage(cvGetSize(object), 8, 3);cvCvtColor( object, object_color, CV_GRAY2BGR );

CvSeq *objectKeypoints = 0, *objectDescriptors = 0;cvExtractSURF( object, 0, &objectKeypoints, &objectDescriptors, storage, params );printf("Object Descriptors: %d\n", objectDescriptors->total);printf("Image Descriptors: %d\n", imageDescriptors->total);CvPoint src_corners[4] = {{0,0}, {object->width,0}, {object->width, object->height}, {0,object->height}};CvPoint dst_corners[4];IplImage* correspond = cvCreateImage( cvSize(image->width, object->height+image->height), 8, 1 );cvSetImageROI( correspond, cvRect( 0, 0, object->width, object->height ) );cvCopy( object, correspond );cvSetImageROI( correspond, cvRect( 0, object->height, correspond->width,correspond->height ) );cvCopy( image, correspond );cvResetImageROI( correspond );

if( locatePlanarObject( objectKeypoints, objectDescriptors, imageKeypoints,imageDescriptors, src_corners, dst_corners ))

Page 45: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

39

{printf("object found\n");for( i = 0; i < 1; i++ ){CvPoint r1 = dst_corners[i%4];CvPoint r2 = dst_corners[(i+1)%4];cvLine( correspond, cvPoint(r1.x, r1.y+object->height ),cvPoint(r2.x, r2.y+object->height ), colors[8] );printf("%d,%d\n", r1.x, r1.y);

if(r1.x<290){printf("MOVE RIGHT\n");//sy=system("echo -n '3' > /dev/ttyUSB0");}if(r1.x>340){printf("MOVE LEFT\n");//sy=system("echo -n '2' > /dev/ttyUSB0");}if((r1.x>290)&&(r1.x<340)){printf("MOVE FORWARD\n");//sy=system("echo -n '1' > /dev/ttyUSB0");

}

}}else{printf("searching.....\n");//sy=system("echo -n '7' > /dev/ttyUSB0");printf("searching..doi tuong...\n");}vector<int> ptpairs;findPairs( objectKeypoints, objectDescriptors, imageKeypoints, imageDescriptors,ptpairs );for( i = 0; i < (int)ptpairs.size(); i += 2 ){CvSURFPoint* r1 = (CvSURFPoint*)cvGetSeqElem( objectKeypoints, ptpairs[i] );

Page 46: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

40

CvSURFPoint* r2 = (CvSURFPoint*)cvGetSeqElem( imageKeypoints, ptpairs[i+1] );cvLine( correspond, cvPointFrom32f(r1->pt),cvPoint(cvRound(r2->pt.x), cvRound(r2->pt.y+object->height)), colors[8] );}

cvShowImage( "Object Correspond", correspond );for( i = 0; i < objectKeypoints->total; i++ ){CvSURFPoint* r = (CvSURFPoint*)cvGetSeqElem( objectKeypoints, i );CvPoint center;int radius;center.x = cvRound(r->pt.x);

Page 47: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

41

3 Chương 3 Kết quả thử nghiệm và định hướng ứng dụng

Hình3.1 Tìm thấy đối tượng bên tráivà ra lệnh robot dịch chuyển sangphải

Hình 3.2 Tìm thấy đối tượng bên phải và ra lệnh robot dichuyển qua trái

Hình 3.3 Tìm thấy đối tượng bên phía trước và ra lệnhrobot đi thẳng

Page 48: Bao Cao Toan Van NCKH GV 2012 - Nguyen Phat Nhut

42

4 Tài liệu tham khảo[1].Learning computer Vision with the OpenCV Library, Gary Bradski and Adrian

Kaehler, University of British Comlumbia, Mỹ.[2].OpenCV 2 Computer Vision Application Programming Cookbook, Robert

Laganière, Published by Packt Publishing Ltd, 32 Lincoln Road, Olton,Birmingham, B27 6PA, UK.

[3].“Analysis of Kinect for Mobile Robots,” Mikkel Viager, Technical University ofDenmark, p. 11

[4].“A Qualitative Analysis of Two Automated Registration Algorithms In Real WorldScenario Using Point Clouds from the Kinect” Jacob Kjær,June 27, 2011.

[5].http://openni.org/Documentation[6].http://pointclouds.org/documentation[7].http://en.wikipedia.org/wiki/Kinect