Đăng ký Đăng nhập
Trang chủ Xây dựng hệ thống phân tích hình ảnh trên ros cho robot hướng dẫn viên...

Tài liệu Xây dựng hệ thống phân tích hình ảnh trên ros cho robot hướng dẫn viên

.PDF
57
30
77

Mô tả:

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Trần Ngọc Linh XÂY DỰNG HỆ THỐNG PHÂN TÍCH HÌNH ẢNH TRÊN ROS CHO ROBOT HƯỚNG DẪN VIÊN LUẬN VĂN THẠC SĨ: KHOA HỌC MÁY TÍNH Hà Nội - 2020 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TRẦN NGỌC LINH XÂY DỰNG HỆ THỐNG PHÂN TÍCH HÌNH ẢNH TRÊN ROS CHO ROBOT HƯỚNG DẪN VIÊN Ngành: Khoa học máy tính Chuyên ngành: Khoa học máy tính Mã số: 8480101.01 LUẬN VĂN THẠC SĨ: KHOA HỌC MÁY TÍNH NGƯỜI HƯỚNG DẪN KHOA HỌC: TS. TRẦN QUỐC LONG Hà Nội - 2020 VIETNAM NATIONAL UNIVERSITY, HANOI UNIVERSITY OF ENGINEERING AND TECHNOLOGY i LỜI CAM ĐOAN Tôi xin cam đoan các kết quả thực nghiệm và nghiên cứu mà được trình bày trong luận văn đều do tôi thực hiện dưới sự hướng dẫn của Tiến sĩ Trần Quốc Long. Tất cả những tham khảo và những nghiên cứu liên quan trong luận văn đều được trích dẫn nguồn gốc rõ ràng ở phần tài liệu tham khảo của cuối luận văn. Tôi cam đoan rằng trong luận văn không có việc sao chép tài liệu và công trình nghiên cứu của người khác mà không ghi rõ nguồn gốc trích dẫn. TÁC GIẢ LUẬN VĂN Trần Ngọc Linh ii LỜI CẢM ƠN Lời đầu tiên, tôi muốn gửi lời cảm ơn chân thành và sâu sắc đến giáo viên hướng dẫn của tôi, Tiến sĩ Trần Quốc Long đang công tác tại Khoa Công Nghệ Thông Tin của Trường Đại học Công nghệ - Đại học Quốc Gia Hà Nội. Thầy đã tận tình hướng dẫn và cho tôi những lời khuyên bổ ích để giúp tôi có thể hoàn thành luận văn này. Bên cạnh đó, tôi cũng xin cám ơn Giáo sư, Tiến sĩ Chử Đức Trình và Phó giáo sư, Tiến sĩ Bùi Thanh Tùng đang công tác tại khoa Điện Tử Viễn Thông của Trường Đại học Công Nghệ - Đại học Quốc Gia Hà Nội, luôn luôn hỗ trợ đội nhóm phát triển Robot để có những trang thiết bị cần thiết phục vụ cho việc nghiên cứu phát triển thành công Fuso. Tôi cũng chân thành cảm ơn hai em Nguyễn Đình Tuân, Phan Hoàng Anh và các em trong nhóm đề tài “QG.17.69-Nghiên cứu phát triển robot thuyết minh và hướng dẫn” đã luôn luôn giúp đỡ và hỗ trợ tôi trong quá trình nghiên cứu. Lời cuối cùng tôi xin cảm ơn gia đình và bạn bè đã ủng hộ, khích lệ tôi trên con đường học vấn. Hà Nội, Ngày 30 tháng 6 năm 2020 Trần Ngọc Linh iii TÓM TẮT Những năm gần đây, với sự phát triển mạnh mẽ và đột phá từ công nghệ, đặc biệt là trong lĩnh vực trí tuệ nhân tạo, nhiều công việc của con người mà máy tính đã làm rất tốt như nhận dạng mặt người hay có thể nói chuyện và tương tác giống như Sophia hoặc có thể hỗ trợ các bác sĩ trong việc chẩn đoán, dự báo và điều trị bệnh. Cùng với xu hướng phát triển của công nghệ nói chung hay robot trên toàn thế giới nói riêng, robot Fuso đã được nghiên cứu và phát triển để có thể thay thế con người làm hướng dẫn viên trong các phòng trưng bày, viện bảo tàng. Robot được chia làm 4 phần khác nhau để phát triển độc lập: hệ thống xử lý chuyển động, hệ thống xử lý giao diện tương tác, hệ thống phân tích âm thanh và hệ thống phân tích hình ảnh. Luận văn này tập trung vào phát triển hệ thống phân tích hình ảnh cho robot, bao gồm 3 mô-đun nhỏ hơn. Thứ nhất, xây dựng mô-đun bộ máy trạng thái hữu hạn trên ROS để dựng lên tất các trạng thái hoạt động của robot mà ở đó có thể giao tiếp, trao đổi dữ liệu với các phần khác trong robot cùng hoàn thành một chức năng cụ thể. Thêm vào đó, xây dựng bộ máy trạng thái hữu hạn giúp cho việc mở rộng, nâng cấp các chức năng và gỡ lỗi trong quá trình phát triển sẽ dễ dàng hơn. Mô-đun thứ hai là xây dựng phát hiện hành động vẫy tay dựa trên thông tin khung xương cánh tay được trích xuất từ kết quả của thuật toán phát hiện khung xương người Openpose. Với mô-đun này giúp robot có thể phát hiện người cần hỗ trợ qua hành động vẫy tay để tiếp cận và phục vụ. Hiện tại, phát hiện vẫy tay đạt độ chính xác trung bình xấp xỉ 78% với khoảng cách đến robot từ 1 đến 5 mét. Và cuối cùng là việc xây dựng mô-đun nhận diện mặt người dựa thuật toán Facenet với độ chính xác 97% giúp cho Fuso có khả năng ghi nhớ khuôn mặt người đã từng phục vụ để lần sau phục vụ tốt hơn. Với việc xây dựng bộ máy trạng thái hữu hạn và ứng dụng thuật toán phát hiện vẫy tay và nhận điện khuôn mặt đã giúp Fuso có thể phát hiện được người vẫy tay cần hỗ trợ, di chuyển đến để nhận diện đối tượng và chào người đó bằng tên nếu đã biết trước. Hiện tại, robot đã được chạy thử nghiệm ở phòng truyền thống của Đại Học Quốc Gia Hà Nội. Từ khóa: Fuso, robot hướng dẫn viên, phân tích hình ảnh iv MỤC LỤC Danh mục hình vẽ ......................................................................................................................... vi Danh mục các kí hiệu, viết tắt ................................................................................................... viii Chương 1 .........................................................................................................................................1 Giới thiệu vấn đề và bài toán cần giải quyết ................................................................................1 1.1. Lịch sử hình thành và phát triển của robot............................................................................ 1 1.2. Giới thiệu bài toán................................................................................................................. 2 1.3. Những đóng góp chính .......................................................................................................... 6 1.4. Cấu trúc luận văn .................................................................................................................. 7 Chương 2 ........................................................................................................................................ 8 Cơ sở lý thuyết ............................................................................................................................... 8 2.1. Hệ điều hành Robot – Robot Operating System ................................................................... 8 2.2. Vectơ hỗ trợ hồi qui (Support Vector Machine - SVM) ..................................................... 12 2.3. Thuật toán xác định khung xương người - OpenPose ........................................................ 15 2.4. Thuật toán hỗ trợ nhận diện mặt người FaceNet ................................................................ 17 Chương 3 ...................................................................................................................................... 22 Thiết kế và cài đặt hệ thống ........................................................................................................ 22 3.1. Kiến trúc tổng quan hệ thống phân tích hình ảnh ............................................................... 22 3.2. Mô-đun phát hiện vẫy tay ................................................................................................... 29 3.3. Mô-đun nhận dạng mặt người ............................................................................................. 32 3.4. Xây dựng kịch bản .............................................................................................................. 34 Chương 4 ...................................................................................................................................... 40 Kết quả thử nghiệm, ứng dụng và tổng kết ............................................................................... 40 4.1. Kết quả phát hiện vẫy tay.................................................................................................... 40 4.2. Kết quả nhận diện mặt người .............................................................................................. 41 v 4.3. Ứng dụng thực tiễn ............................................................................................................. 43 4.4. Tổng kết .............................................................................................................................. 45 Tài liệu tham khảo ....................................................................................................................... 46 vi Danh mục hình vẽ Hình 1-1-Camera Intel Realsense D435 [15] .................................................................................. 6 Hình 2-1-Trao đổi thông tin giữa các node qua Topic .................................................................. 11 Hình 2-2-Trao đổi thông tin giữa các node qua Service................................................................ 12 Hình 2-3-Các đường phân chia hai lớp ......................................................................................... 13 Hình 2-4-Điểm nhiễu nằm gần mặt phân tách (trái) và điểm nhiễu nằm bên mặt phân tách lớp còn lại (phải) ......................................................................................................................................... 14 Hình 2-5-So sánh các thuật toán với OpenPose ............................................................................ 16 Hình 2-6-Sơ đồ tổng quát thuật toán OpenPose ............................................................................ 16 Hình 2-7-Cấu trúc mô hình của FaceNet [14] ............................................................................... 17 Hình 2-8-Mạng học sâu Inception ResNet V1 [19] ....................................................................... 20 Hình 3-1-Thành phần chính của hệ thống ..................................................................................... 23 Hình 3-2-Sơ đồ chuyển trạng thái của máy trạng thái hữu hạn ..................................................... 24 Hình 3-3-Thiết kế tệp cài cho việc tự động xây dựng bộ máy trạng thái hữu hạn ........................ 25 Hình 3-4-Thiết kế các lớp cho việc tự động xây dựng bộ máy trạng thái hữu hạn ....................... 26 Hình 3-5-Mô hình kế thừa của các bài toán phân tích hình ảnh .................................................... 27 Hình 3-6-Các tác vụ đăng kí nhận dữ liệu từ Realsense D435 ...................................................... 28 Hình 3-7-Sơ đồ tổng quan thuật toán vẫy tay ................................................................................ 29 Hình 3-8-Góc tạo thành giữa cánh tay và mặt phẳng ngang khi vẫy ............................................ 30 Hình 3-9-Định danh người qua trục hoành Ox .............................................................................. 31 Hình 3-10-Sơ đồ tổng quát nhận dạng khuôn mặt người .............................................................. 32 Hình 3-11-Tìm mặt người vẫy tay ................................................................................................. 33 Hình 3-12-Sơ đồ chuyển trạng thái qua các kịch bản .................................................................... 34 vii Hình 3-13-Sơ đồ chuyển trạng thái qua kịch bản phát hiện người vẫy tay ................................... 35 Hình 3-14-Sơ đồ chuyển trạng thái qua kịch bản nhận diện khuôn mặt người ............................. 37 Hình 4-1-Kết quả thử nghiệm phát hiện vẫy tay ........................................................................... 40 Hình 4-2-Kết quả huấn luyện nhận dạng mặt người K-Fold ......................................................... 42 Hình 4-3-Ảnh nhận diện mặt người trong thực tế ......................................................................... 42 Hình 4-4-Một số hình ảnh của robot Fuso tại triển lãm và trong phòng trưng bày của Đại học Quốc Gia Hà Nội ........................................................................................................................... 44 viii Danh mục các kí hiệu, viết tắt ROS Robot Operating System – Hệ điều hành Robot MTCNN Multi-task Cascaded Convolutional Networks SVM Support Vector Machine SLAM Simultaneous Localization and Mapping LFW Labeled Faces in the Wild 1 Chương 1 Giới thiệu vấn đề và bài toán cần giải quyết 1.1. Lịch sử hình thành và phát triển của robot Những năm gần đây, với sự phát triển mạnh mẽ của công nghệ và thời đại 4.0 được mở ra, con người ngày càng quan tâm đặc biệt đến việc tự động hóa, làm máy móc trở nên thông minh lên giống như con người để nâng cao hiệu quả sản xuất, phục vụ những nhu cầu cơ bản cho con người. Và robot đã dần được đưa vào trong các xưởng, trong đời sống thường ngày. Vậy từ “robot” xuất hiện từ bao giờ? Lịch sử hình thành, phát triển và những thành tựu nổi bật như thế nào? Phần này sẽ giới thiệu một cách tổng quan nhất về robot. Từ “robot” được sử dụng đầu tiên vào năm 1921 trong vở kịch “Rossum’s Universal Robots” của Karel Čapek (1890-1938) – một nhà văn lừng danh người cộng hòa Séc đầu thế kỉ XX. Từ này xuất phát từ từ “robota” mà theo tiếng địa phương nghĩa là “việc nặng nhọc” hay “lao động cưỡng bức”. Ngoài ra, một từ khác cũng được sử dụng nhiều là “robotics”. Từ này lần đầu tiên được dùng bởi nhà văn Isaac Asimov (1920-1992) trong truyện ngắn “Runaround”. Trong chuyện nhà văn đã định nghĩa ba luật liên quan đến hành vi của robot mà tương tác với con người mà về sau đã được đặt tên là “Luật của Robotics” (Laws of Robotics). Dù là từ robot hay robotics thì mục đích chung của hai từ này đều chỉ đến những công cụ, máy móc có thể thực những công việc một cách tự động để phục vụ cho con người. Robot ngày càng đóng vai trò quan trọng công nghiệp giúp thúc đẩy sản xuất. Với sự phát triển của robot, người ta đã chia robot thành 4 thế hệ: Robot thế hệ 1 (1950-1967), robot thế hệ 2 (1968-1977), robot thế hệ 3 (1978-1999), robot thế hệ 4 (2000-nay) [1]. Robot thế hệ 1 có đặc điểm là được điều khiển bởi những thuật toán đơn giản lập trình sẵn 2 và không có khả năng lấy thông tin từ môi trường. Nổi bật trong robot thế hệ đầu là cánh tay robot có tên UNIMATE. Đây là robot công nghiệp đầu tiên được công nhận do 2 nhà sáng chế George Devol và Joe Engelberger tạo ra và được lắp ráp sử dụng trong dây chuyền lắp ráp của hãng sản xuất ô tô General Motors năm 1969. UNIMATE đã giúp hãng cải thiện khả năng sản xuất. Robot thế hệ thứ 2 với những cảm biến xung quanh đã có thể lấy được thông tin từ môi trường và đáp ứng lại những thông tin đó. Shakey [2] là robot di động có cảm biến đầu tiên được nhà nghiên cứu trong viện nghiên cứu của Stanford phát triển. Robot thế hệ thứ 3 đã có những bộ điều khiển chuyên dụng (những chiếc máy tính) và có những ngôn ngữ mới cho lập trình điều khiển robot. Đây là thời đại của robot với sự đầu tư lớn từ các công ty để có thể tự động hóa các việc cơ bản trong dây chuyền lắp ráp. Các robot phổ biến tự động hóa trong các hoạt động như sơn, di chuyển, lắp ráp. Ngoài ra, robot được mở rộng sang các lĩnh vực khác như robot giải trí của Sony, AIBO (1999) [3]. Robot thế hệ thứ 4 có khả năng tính toán vượt trội, không chỉ làm việc với dữ liệu mà nó còn có khả năng suy luận logic và học hỏi hơn nữa trí tuệ nhân tạo được đưa vào để có thể giải quyết những bài toán khó trước đây mà lập trình truyền thống khó có thể giải quyết được với độ chính xác cao. Nổi bật trong thế hệ này có robot ASIMO của tập đoàn Honda hay robot Roomba là robot hút bụi đầu tiên được giới thiệu hay là xe tự hành của Tesla. Trải qua các thế hệ robot dần được nâng cấp, sự tự động hóa được nâng cao và sự thông minh dần được đưa vào để robot có thể phục vụ cho con người trong đời sống thường ngày và trong công nghiệp có thể nâng cao năng lực sản xuất với những sản phẩm có độ tin cậy cao. Với tiềm năng phát triển trong tương lai của robot bài toán xây dựng robot thông minh đã được nghiên cứu và xây dựng. 1.2. Giới thiệu bài toán Với sự phát triển của tuệ nhân tạo như cuộc cách mạng lần thứ tư (1 – động cơ hơi nước, 2 – năng lượng điện, 3 – công nghệ thông tin) đã dần biến những điều tưởng rằng chỉ có trong khoa học viễn tưởng thành hiện thực. Năm 2011, Watson [4] – Một chương trình phần mềm trí tuệ nhân tạo do IBM phát triển, đã chiến thắng cuộc thi trong chương trình hỏi đáp trên truyền hình có tên Jeopardy. Còn trong sản phẩm thương mại có trợ lý ảo Siri của Apple có thể hiểu các câu hỏi của người dùng và phản hồi chính xác điều người dùng muốn tương tác trên điện thoại di động. Công nghệ xe tự hành của những công ty lớn như Apple, Tesla, Google, Toyota cũng có những bước tiến vượt bậc nhờ vào những cảm biến xung quanh ô tô và được huấn luyện với mạng nơ-ron giúp ô tô có khả năng tự học hỏi 3 được những kĩ năng lái xe. Ngoài ra, năm 2016, AlphaGo do Google DeepMind phát triển đã làm chấn động thế giới khi đánh bại kỳ thủ cờ vây chuyên nghiệp người Hàn Quốc, Lee Sedol. Khác với cờ vua là với sức mạnh máy tính hiện nay có thể tính toán được hết số nước trong cờ vua đi để tìm ra được nước đi tối ưu nhất và dành chiến thắng thì trong cờ vây số nước đi lớn hơn rất nhiều. Giới hạn dưới về số lượng vị trí nước đi hợp lệ trên bàn cờ trong cờ vây được ước tính là 2 ∗ 10%&' , đó là một con số rất lớn để mà máy tính có thể tính toán được. Chính vì vậy AlphaGo đã được huấn luyện qua mạng nơ-ron học sâu có giám sát với chuyên gia và học tăng cường. Theo như bài báo [5] thì AlphaGo đạt tỉ lệ chiến thắng lên đến 99,8%. Đặc biệt hơn hết vào tháng 10 năm 2017, tại Ả Rập Xê Út đã cấp quyền công dân cho robot đầu tiên trên thế giới có tên là Sophia [6]. Sophia có lớp da được làm bằng silicon trông giống như da người. Robot có khả năng biểu hiện tổng 62 sắc thái trên khuôn mặt (như giận, vui, buồn, v.v), hay có khả năng tương tác nói chuyện gần như con người. Những minh chứng trên cho thấy rằng việc đưa trí tuệ nhân tạo vào robot là một bước tiến lớn trong quá trình phát triển robot làm cho robot thông minh hơn, gần gũi với con người hơn để có thể giúp ích cho con người trong đời sống thường ngày như để phục vụ, tư vấn, chăm sóc sức khỏe, trong giáo dục và trong các ứng dụng dịch vụ chăm sóc khách hàng. Đối với nước ta việc sản xuất và ứng dụng robot thông minh vào trong các lĩnh vực vẫn còn hạn chế. Chủ yếu là trong công nghiệp với những cánh tay robot trong dây truyền sản xuất được chuyển giao công nghệ từ nước ngoài. Từ những tiềm năng của sự phát triển robot trên thế giới và những hạn chế trong nước, robot Fuso đã được nghiên cứu, xây dựng và phát triển để có thể đóng góp một phần nhỏ trong sự phát triển robot của đất nước và đó cũng là cơ sở nền tảng quan trọng để phát triển các thế hệ robot thông minh sau này. Với mục tiêu xây dựng robot Fuso có hình dáng giống con người có khả năng làm hướng dẫn viên trong viện bảo tàng, khu trưng bày hoặc trong các bệnh viện hay siêu thị, trung tâm thương mại thì robot Fuso cần nhận diện được cử chỉ vẫy tay của con người từ xa và phản ứng lại những cử chỉ đó, nhận diện được mặt người đã từng gặp và có khả năng di chuyển linh hoạt đến các địa điểm được yêu cầu của người dùng bằng giọng nói. Về tổng quan robot được chia thành các phần nhỏ hơn phát triển độc lập: Phần về phân tích hình ảnh để nhận diện các cử chỉ hành động, khuôn mặt của người dùng; phần về phân tích âm thanh sẽ phân tích để hiểu các câu, mệnh lệnh; phần về xử lý chuyển động cơ học sẽ nhận các mệnh lệnh để có thể di chuyển mượt và đúng đến địa điểm yêu cầu; phần xây dựng giao diện người dùng giúp người dùng có thể tương tác qua màn hình cảm ứng. Và tất các các phần sẽ giao tiếp với nhau thông qua kênh truyền thông tin topic và service của hệ điều hành 4 ROS – Robot Operating System [7]. Trong luận văn này, tôi xin trình bày bày hệ thống phân tích hình ảnh cho robot. Phân tích hình ảnh được chia ra làm các 3 mô-đun nhỏ: môđun xây dựng bộ máy trạng thái hữu hạn để dựng lên tất các trạng thái hoạt động của robot mà ở đó có thể giao tiếp, trao đổi dữ liệu với các phần khác trong robot cùng hoàn thành một chức năng cụ thể. Việc xây dựng bộ máy trạng thái hữu hạn cũng giúp cho việc mở rộng, nâng cấp của chức năng và gỡ lỗi sẽ dễ dàng hơn; mô-đun nhận diện cử chỉ vẫy tay sử dụng thuật toán OpenPose tìm khung xương người từ đó tính toán để phát hiện ra dấu hiệu cử chỉ vẫy tay; mô-đun nhận dạng khuôn mặt dựa trên thuật toán Facenet để tìm vectơ embedding, vectơ này tiếp tục được đưa vào mô hình SVM [8] đã được huấn luyện trước để tìm ra tên người vẫy. Trong quá trình xây dựng phát triển hệ thống thống phân tích hình ảnh cho robot có một số vấn đề gặp phải: • Hệ thống phân tích hình ảnh cho robot gồm có các thuật toán khác nhau để thực hiện các chức năng khác nhau trong việc phân tích hình ảnh trích xuất và biến đổi thông tin cần thiết để cung cấp cho các bộ phận khác cho robot (như bộ phận điều khiển di chuyển, bộ phận phân tích âm thanh). Các chức năng trong hệ thống phân tích hình ảnh không chỉ được thực hiện tuần tự mà còn có thể thực hiện song song chính vì vậy cần xây dựng hệ thống tổng có thể quản lý, điều khiển các thuật toán khi nào được thực thi, khi nào dừng lại để đồng nhất trong hành động với các bộ phận khác của robot. Mặt khác, việc tìm ra lỗi dễ dàng và nhanh chóng cũng cần thiết trong quá trình phát triển mà bị xảy ra lỗi. Vậy nên bộ máy trạng thái hữu hạn cần được đưa vào trong việc xây dựng hệ thống tổng quát cho phân tích hình ảnh. • Trong quá trình tương tác với con người, robot cần phản ứng nhanh chóng nhất để đáp ứng mệnh lệnh của con người. Vì vậy các thuật toán vừa cần độ chính xác cao và phản hồi nhanh. Thêm vào đó là những giới hạn phần cứng trên robot đã được thiết lập sẵn nên trong quá trình phát triển một chức năng thì cần thử nghiệm nhiều thuật toán khác nhau để so sánh và tìm thuật toán phù hợp nhất, đồng nhất với môi trường với các thuật toán đã cài đặt trước đó và thiết bị phần cứng xây dựng nên robot. 1.2.1. Bo mạch Jetson TX2 Bo mạch Jetson TX2 [16] được Nvidia cho ra mắt vào tháng 3 năm 2017. Đây là một bo mạch có tính toán mạnh mẽ có thể thực hiện được hơn một nghìn tỷ phép tính trong một 5 giây (1,3 TFLOPS) và sức mạnh tính toán gấp đôi so với Jetson Nano (0,5 TFLOPS). Thiết bị sinh ra nhằm mục đích chính cho việc phát triển các ứng dụng trí tuệ nhân tạo trên đó nên phù hợp với định hướng xây dựng robot thông minh như trên đã đề ra. Ngoài ra, nhà sản xuất Nvidia hỗ trợ bộ công cụ phát triển JetPack SDK mà tích hợp các công cụ và thư viện cho việc xây dựng nhanh chóng các ứng dụng trí tuệ nhân tạo như: TensorRT: Có tác dụng tối ưu hiệu năng chạy cho các mạng học sâu như phân loại ảnh, phân vùng ảnh và nhận diện đối tượng. cuDNN: Viết tắt của từ CUDA Deep Neural Network là một thư viện cung cấp các thiết lập được tinh chỉnh cho các thủ tục chuẩn như forward/backward convolution, pooling, normalization và activation layer từ đó giúp hiệu năng của các ứng dụng trí tuệ nhân tạo tốt hơn. CUDA: Là công cụ phát triển cung cấp môi trường phát triển thích hợp cho các nhà phát triển C/C++ xây dựng các ứng dụng được tăng tốc bởi GPU. Nó bao gồm các thư viện toán học, công cụ cho gỡ lỗi, tối ưu hiệu năng cho ứng dụng. ComputerVision(CV): gồm có các gói, thư viện như VisionWorks, OpenCV. Đây là những gói, thư viện cho thị giác máy, xử lý ảnh và học máy. Bo mạch Jetson TX2 nhỏ gọn mạnh mẽ và tích hợp nhiều các công cụ, thư viện và các gói giúp cho việc phát triển các ứng dụng dễ dàng hơn. Bên cạnh bo mạch nhỏ gọn, mạnh mẽ thì camera có chất lượng hình ảnh tốt rất cần thiết cho bài toán phân tích hình ảnh cho robot. 1.2.2. Camera RealSense D435 Camera chiều sâu RealSense D435 [15] thuộc dòng D400 của Intel được giới thiệu vào năm 2018. So với Kinect của Microsoft thì RealSense D435 nhỏ gọn và có thể quan sát xa hơn. Với Kinect độ sâu mà camera quan sát trong khoảng từ 0,5-4,5m còn đối với RealSense là 0,11-10m. Với phạm vi rộng thích hợp cho robot quan sát trong môi trường của một phòng trưng bày hay viện bảo tàng. Chất lượng hình ảnh cho ra của RealSense rất tốt với độ phân giải 1920x1080 và tốc độ khung hình 30fps. RealseSense D435 cấu tạo gồm 3 camera với 2 camera màu ở 2 bên và 1 camera hồng ngoại. 2 camera màu giúp RealSense sinh ra những bức ảnh độ sâu còn camera hồng ngoại giúp tinh chỉnh để tăng chất lượng những bức ảnh độ sâu. Thành phần chính của camera được mô tả như Hình 1-1. 6 Hình 1-1-Camera Intel Realsense D435 [15] Ngoài ra, Intel có hỗ trợ bộ công cụ RealSense SDK 2.0 để có thể dễ dàng làm việc với RealSense, giúp tinh chỉnh để cho ra được hình ảnh có chất lượng tốt ứng với từng môi trường, lấy các thông số và hình ảnh của camera. 1.3. Những đóng góp chính Như ở phần giới thiệu bài toán đã đề cập để xây dựng và phát triển được Fuso thì các phần được phát triển độc lập nhau và luận văn tập trung chủ yếu xây dựng nên hệ thống phân tích hình ảnh trên ROS cho robot hướng dẫn viên. Trong đó có 3 mô-đun chính và đó cũng là những đóng góp chính trong luận văn này. Thứ nhất, xây dựng mô-đun bộ máy trạng thái hữu hạn mà định nghĩa các trạng thái hoạt động của robot. Với việc xây dựng nên mô-đun này sẽ giúp hệ thống dễ dàng mở rộng sau này và dễ dàng kiểm soát lỗi khi hệ thống hoạt động không như mong muốn. Thứ hai, xây dựng mô-đun phát hiện người vẫy tay dựa trên phương pháp tìm khung xương người OpenPose. Thứ ba, xây dựng mô-đun nhận dạng khuôn mặt sử dụng mô hình SVM đã được huấn luyện với đầu vào là các vectơ embedding được trả về từ thuật toán FaceNet. 7 1.4. Cấu trúc luận văn Phần còn lại của chương đầu là cấu trúc của luận văn Chương 1: Giới thiệu vấn đề và bài toán cần giải quyết Giới thiệu về tổng quan về robot, lịch sử hình thành và phát triển qua các thế hệ robot. Từ đó, giới thiệu bài toán xây dựng phát triển robot, cụ thể hơn là bài toán phân tích hình ảnh đầu vào cho robot. Bên cạnh đó, các thiết bị phần cứng và thư viện hỗ trợ để giải quyết bài toán cũng được giới thiệu. Chương 2: Cơ sở lý thuyết Trong chương này tập trung vào giải thích những kiến thức nền tảng. Đầu tiên giới thiệu về ROS – Robot Operating System gồm có các thành phần cơ bản cấu tạo nên ROS và những phương thức trao đổi dữ liệu giữa các Node trong ROS hoạt động ra sao. Sau đó là nêu ra ý tưởng chính và phương pháp của các thuật toán SVM – Support Vector Machine, OpenPose và FaceNet. Chương 3: Cài đặt thiết kế hệ thống Trình bày về thiết kế tổng quan hệ thống với các mô-đun để xây dựng nên bộ phân tích hình ảnh cho robot. Trình bày về thuật toán, cài đặt cho từng mô-đun. Với OpenPose để nhận diện khung xương người và những cải tiến để nhận diện hành động vẫy tay của con người. Với mô-đun nhận dạng mặt người, thuật toán FaceNet của Google được áp dụng để nhận diện mặt người vẫy tay. Và cuối cùng là những kịch bản xây dựng để chạy robot. Chương 4: Kết quả thử nghiệm, ứng dụng và tổng kết Trình bày những kết quả đạt được trong quá trình phát triển và kết quả triển khai trong thực tiễn. Tóm tắt lại những đóng góp chính trong luận văn, những hạn chế chưa giải quyết được và định hướng phát triển trong tương lai. 8 Chương 2 Cơ sở lý thuyết 2.1. Hệ điều hành Robot – Robot Operating System ROS – Robot Operating System [7] là một hệ điều hành mã nguồn mở cung cấp một nền tảng cho việc nghiên cứu và phát triển robot được dễ dàng được tạo bởi phòng nghiên cứu Willow Garage và đang được phát triển bởi quỹ mã nguồn mở Robotics. Mặc dù gọi là hệ điều hành tuy nhiên ROS không quản lý các tài nguyên, tiến trình và lập lịch tiến trình mà ROS cung cấp một lớp gửi nhận dữ liệu có cấu trúc giữa các ứng dụng với nhau, công cụ giả lập trực quan và kết nối với cộng đồng nghiên cứu robot trên toàn thế giới. Với những đóng góp lớn từ cộng đồng đặc biệt là từ các viện nghiên cứu và trường đại học hàng đầu trên thế giới thì việc xây dựng ứng dụng trên robot trên nền ROS sẽ giảm đi một lượng đáng kể công việc lập trình cơ bản và tập trung được vào công việc nghiên cứu chuyên sâu. Thêm nữa, ROS hỗ trợ nhiều ngôn ngữ như C\C++, Python nên việc bắt đầu tiếp cận và lập trình với ROS trở nên đơn giản hơn. 2.1.1. Cấu trúc thư mục và các thành phần trong ROS 2.1.1.1. Cấu trúc thư mục trong ROS Trong ROS, đơn vị chính cho việc tổ chức phần mềm là các package [17]. Mỗi một package có thể gồm các chương trình gọi là nodes, thư viện phụ thuộc ROS, các tập dữ liệu, 9 các tệp cấu hình và các dữ liệu khác cần thiết trong hệ thống. Mục đích chính của các package là cung cấp các chức năng để các phần mềm khác có thể tái sử dụng. Trong thư mục package thông thường gồm có các thành phần chính: tệp package manifest, các message type, các service type. Tệp package manifest cung cấp thông tin ngắn gọn về package như tên package, tác giả, phiên bản, mô tả và các gói phụ thuộc. Các message type định nghĩa cấu trúc dữ liệu gửi nhận tin qua topic trong ROS. Các service type định nghĩa cấu trúc dữ liệu gửi nhận cho service trong ROS. 2.1.1.2. Các thành phần trong ROS Master: là thành phần quan trọng quản lý kết nối truyền tin giữa các nodes. Mọi node đều phải đăng kí với master khi khai báo, giúp cho master cung cấp thông tin cho các node còn lại có thể tra cứu, nó giống như một máy chủ DNS. Nếu không có master thì các node không thể tìm thấy nhau và việc trao đổi thông tin giữa các node đều không thể thực hiện được. Nodes: là đơn vị tính toán, xử lý dữ liệu và thực hiện một chức năng cụ thể nào đó. Thông thường một hệ điều khiển robot thường sẽ bao gồm nhiều nodes mà mỗi nodes lại chuyên biệt một công việc. Ví dụ như một node điều khiển động cơ bánh xe, một node định vị, một node lập kế hoạch định hướng đường đi. Mỗi node ROS được xây dựng nhờ sử dụng thư viện ROS client (roscpp, rospy). Và các node trao đổi dữ liệu với nhau gửi nhận dữ liệu qua topic hay services. Mỗi node đều có một tên duy nhất trong toàn bộ hệ thống và tên này chính là định danh để các node khác biết mà có thể giao tiếp với nhau được. ROS cũng cung cấp công cụ để làm việc dễ dàng với ros qua dòng lệnh rosnode. Ví dụ như “rosnode list” để liệt kê các node đang hoạt động trong hệ thống, hay “rosnode info node” để in những thông tin về node. Messages: Để cho các node có thể trao đổi được dữ liệu cho nhau thì dữ liệu cần có định dạng thống nhất và messages chính là thành phần quy định định dạng cấu trúc của dữ liệu mà các node dùng để trao đổi. Trong một message bao gồm một hay nhiều cặp kiểu dữ liệu và tên dữ liệu đi cùng với nhau. Kiểu dữ liệu có thể là kiểu nguyên thủy mà trong ROS đã định nghĩa sẵn (như bool, int8, string) hay kiểu người dùng đã định nghĩa trước giống như kiểu struct trong C/C++. Message được chia ra làm hai dạng chính. Thứ nhất là message trao đổi qua topic sẽ được định nghĩa trong một tệp riêng có đuôi mở rộng là .msg. Thứ hai là message được sử dụng qua service cũng được định nghĩa trong một tệp riêng có đuôi mở rộng là .srv. Điều khác biệt trong message có đuôi .srv là định nghĩa cả cấu dữ liệu trả về 10 của service. Hình 2-1 và Hình 2-2 có hình ảnh mô tả message với hình hộp chữ nhật màu cam không viền. Topics: Các message có đuôi mở rộng là .msg được trao đổi giữa các node thông qua topic. Mỗi topic có một tên để định danh và cấu trúc định dạng message tương ứng. Bất kì node nào trong mạng muốn nhận thông tin thì có thể đăng kí nhận thông tin từ topic. Hay node nào cần đẩy thông tin lên topic thì cũng có thể đăng kí đẩy thông tin cho topic. Vậy trong một mạng, một node có thể đăng kí nhận thông tin từ nhiều topic và cũng có thể đăng kí đẩy thông tin cho nhiều topic. Điều này giúp cho ROS có thể tách biệt nguồn tạo ra thông tin với bộ phận sử dụng thông tin đó. Topic được xem như là một kênh truyền thông tin định kiểu mà mỗi kênh truyền có được định danh bởi một tên riêng. Node nào cũng có thể kết nối để gửi/nhận thông tin qua kênh này, miễn là thông tin cùng kiểu với topic đã định nghĩa từ trước. Services: Mô hình truyền thông tin theo qua topic như ở trên trình bày là mô hình rất linh hoạt tuy nhiên trong một số trường hợp các node cần tương tác theo kiểu yêu cầu/đáp ứng (request/response) thì mô hình qua topic lại không còn phù hợp nữa. Do vậy, kiểu truyền dữ liệu service được sinh ra nhằm thực hiện kiểu tương tác yêu cầu/đáp ứng (request/response). Một node trong mạng sẽ đóng vai trò là service để thực hiện các yêu cầu từ các node khác gửi lên. Ví dụ, một node A có cung cấp service tính tổng 2 số. Một node khác là B có thể gửi yêu cầu cho node A với dữ liệu để cho node A tính tổng 2 số và trả về cho node B. Trong thực tế những yêu cầu thường phức tạp hơn rất nhiều. Bags: Là một định dạng dùng để lưu và phát lại dữ liệu. Đây là một cơ chế quan trọng trong việc lưu trữ dữ liệu. Ví dụ như trong phòng lab thiếu thiết bị camera, ta có thể lưu dữ liệu camera thu được thành tệp .bag và tệp này có thể sử dụng bởi nhiều người mà không cần đến thiết bị thật trong việc phát triển và kiểm thử robot. 2.1.2. Trao đổi thông tin giữa các node trong ROS 2.1.2.1. Trao đổi thông tin giữa các node qua topics Để các nodes có thể trao đổi thông tin với nhau qua topics thì các node phải khai báo với ROS master. Thông thường, một node có vai trò đẩy thông tin lên topic và nhiều node sẽ đăng kí nhận thông tin từ topic đó. Để một node có thể đẩy thông tin lên thì node đó cần phải đăng kí thông tin tên topic cần đẩy lên và định dạng dữ liệu đẩy lên (Ví dụ trong Python: “pub = rospy.Publisher(‘chatter’, String, queue_size=10)”). Trong ví dụ trên, node
- Xem thêm -

Tài liệu liên quan

Tài liệu xem nhiều nhất