Intel Galileo sẽ đóng vai trò là một bộ điều khiển trung tâm, kết nối với các thiết bị điện tử, và kết nối với điện thoại hoặc máy tính bảng có chạy ứng dụng đặc biệt.. Hệ thống điều khi
Trang 1TRƯỜNG ĐẠI HỌC CẦN THƠ
KHOA CÔNG NGHỆ
BỘ MÔN ĐIỆN TỬ - VIỄN THÔNG
LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC
Sinh viên thực hiện Cán bộ hướng dẫn
Phạm Hoàng Lượm ThS GV Trương Phong Tuyên MSSV: 1117984
Phạm Thanh Hùng
MSSV: 1117970
Lớp: Kỹ thuật máy tính-K37
Cần Thơ, Tháng 05 năm 2015
Trang 2TRƯỜNG ĐẠI HỌC CẦN THƠ
KHOA CÔNG NGHỆ
BỘ MÔN ĐIỆN TỬ - VIỄN THÔNG
LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC
Sinh viên thực hiện Cán bộ hướng dẫn
Phạm Hoàng Lượm ThS GV Trương Phong Tuyên MSSV: 1117984
Phạm Thanh Hùng
MSSV: 1117970
Lớp: Kỹ thuật máy tính-K37
Trang 3TRƯỜNG ĐẠI HỌC CẦN THƠ
KHOA CÔNG NGHỆ
BỘ MÔN ĐIỆN TỬ - VIỄN THÔNG
Luận văn được thực hiện bởi:
1 Họ tên: Phạm Hoàng Lượm, MSSV: 1117984, Lớp: Kỹ thuật máy tính
2 Họ tên: Phạm Thanh Hùng, MSSV: 1117970, Lớp: Kỹ thuật máy tính
Tựa đề Luận văn (Hay tên đề tài): Điều khiển xe lăn bằng cử động tay
sử dụng board Intel Galileo
Luận văn đã nộp và báo cáo tại Hội đồng chấm bảo vệ Luận văn tốt nghiệp Đại học ngành Điện tử Truyền thông/Kỹ thuật Máy tính, Bộ môn Điện tử - Viễn thông vào ngày … tháng 05 năm 2015 (Quyết định thành lập Hội đồng số: …./QĐ-CN ngày … tháng 05 năm 2015 của Trưởng Khoa Công Nghệ)
Kết quả đánh giá: _
Chữ ký của các thành viên Hội đồng:
Thành viên 1: ThS Trương Phong Tuyên ……… Thành viên 2: TS Lương Vinh Quốc Danh ………
Thành viên 3: ThS Trần Hữu Danh ………
Trang 4LỜI CAM ĐOAN
Với đề tài “Điều khiển xe lăn bằng cử động tay sử dụng board Intel Galileo”
tạo ra một hệ thống điều khiển mới khác biệt hoàn toàn dành cho người khuyết tật Intel Galileo là một sản phẩm đầu tiên sử dụng chip Intel Quark X1000, SoC đầu tiên thuộc dòng "Santa Clara" sản xuất dựa trên dây chuyền công nghệ 14nm với mức độ tiêu thụ điện rất thấp Phương pháp xử lý ảnh chạy ứng dụng trên board Intel Galileo
là một nét mới trong sự phát triển của hệ thống nhúng nên nhóm chúng em quyết định chọn đề tài này
Kết thúc quá trình nghiên cứu và thực hiện, những nội dung trình bày trong quyển báo cáo này là sự hiểu biết và thành quả của chúng em dưới sự giúp đỡ của cán bộ hướng dẫn là Thạc sĩ Trương Phong Tuyên
Chúng em xin cam đoan rằng những nội dung trình bày trong quyển báo cáo Luận văn tốt nghiệp này không phải là bản sao chép từ bất kì công trình nghiên cứu
đã có trước nào Nếu không đúng sự thật, chúng em xin chịu hoàn toàn mọi trách nhiệm trước nhà trường
Cần Thơ, ngày … tháng … năm 2015
Nhóm sinh viên thực hiện
Trang 5LỜI CÁM ƠN
Sau những kết quả đạt được, chúng em không bao giờ quên gửi lời cám ơn chân thành và sâu sắc nhất đến cha mẹ và gia đình chúng em, những người đã hộ trợ chúng em về mặt kinh tế để chúng em có điều kiện tốt nhất thực hiện đề tài của mình Không chỉ vậy, gia đình còn luôn giúp đỡ, động viên và giúp em có thêm nghị lực hoàn thành tốt nhiệm vụ học tập và rèn luyện của mình
Chúng em kính gửi những lời cám ơn chân thành đến đội ngũ cán bộ giảng dạy tại trường Đại học Cần Thơ nói chung và bộ môn Điện tử Viễn Thông trực thuộc Khoa Công nghệ nói riêng đã tận tình giảng dạy, chỉ bảo cũng như tạo mọi điều kiện vật chất trong suốt khoảng thời gian chúng em học tập và rèn luyện tại trường
Đặc biệt xin chân thành cám ơn Thạc sĩ Trương Phong Tuyên, một người thầy một người anh đã tận tình hướng dẫn chúng em thực hiện đề tài luận văn này Xin được biết ơn thầy vì những kiến thức đã truyền đạt, những chỉ dẫn, những tài liệu, cũng như những định hướng kịp thời giúp chúng em thực hiện đúng hướng và đúng tiến độ với đề tài được giao
Trong suốt quá trình học tập nghiên cứu thực hiện đề tài chúng em cũng xin cám ơn sự giúp đỡ nhiệt tình của các anh khóa trước, cúng như sự hợp tác của các bạn trong các nhóm luận khác và cùng toàn thể bạn bè đã nhiệt tình động viên, ủng hộ
và cổ vũ tinh thần cho chúng em
Xin chân thành cám ơn !
Cần Thơ, ngày … tháng … năm 2015
Nhóm sinh viên thực hiện
Trang 6KÍ HIỆU VÀ VIẾT TẮT
IP Intellectual Property
Trang 7MỤC LỤC
CHƯƠNG 1 TỔNG QUAN 6
1.1 ĐẶT VẤN ĐỀ 6
1.2 LỊCH SỬ GIẢI QUYẾT VẤN ĐỀ 6
1.3 PHẠM VI ĐỀ TÀI 7
1.4 PHƯƠNG PHÁP NGHIÊN CỨU 8
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 9
2.1 TỔNG QUAN VỀ XỬ LÝ ẢNH 9
2.1.1 Khái niệm về điểm ảnh - ảnh số 9
2.1.2 Độ phân giải của ảnh 9
2.1.3 Mức xám của ảnh 10
2.1.4 Phân loại ảnh 10
2.1.5 Xử lý ảnh và các phương pháp xử lý ảnh 12
2.1.6 Quy trình xử lí ảnh 13
2.2 PYTHON VÀ OPENCV 14
2.2.1 Python 14
2.2.2 OpenCV 16
2.3 KIẾN THỨC VỀ CỔNG COM 18
2.4 GIỚI THIỆU VỀ BOARD INTEL GALILEO 20
2.4.1 Các thành phẩn trên board Intel Galileo 20
2.4.2 Giao tiếp với Intel Galileo 25
2.4.3 Lập trình với Intel Galileo 26
2.4.4 Thuộc tính các chân ở chế độ hoạt động 28
2.4.6 Reset tự động và đặc điểm vật lí của board Intel Galileo 29
CHƯƠNG 3 XÂY DỰNG HỆ THỐNG 30
3.1 THIẾT KẾ VÀ XÂY DỰNG PHẦN CỨNG 30
3.1.1 Phân tích hệ thống 30
3.1.2 Thiết kế luồng dữ liệu 31
3.1.3 SƠ ĐỒ KHỐI HỆ THỐNG 33
3.2 LẬP TRÌNH PHẦN MỀM VÀ GIẢI THUẬT 39
3.2.1 Lưu đồ giải thuật chương trình trình chính 39
3.2.2 Lưu đồ giải thuật các chương trình con 41
3.2.3 Giải thuật so sánh hai ảnh bằng phương pháp trừ ảnh 45
KẾT LUẬN VÀ ĐỀ NGHỊ 56
TÀI LIỆU THAM KHẢO 58
PHỤ LỤC 59
HƯỚNG DẪN SỬ DỤNG 59
Trang 8MỤC LỤC HÌNH
Hình 2.1 Ảnh nhị phân và nhị phân đảo của bàn tay 10
Hình 2.2 Ảnh xám của một chú chó sói 11
Hình 2.3 Mô hình màu RGB 11
Hình 2.4 Ảnh màu của hai chú chim trên cành cây 12
Hình 2.5 Thực thi lệnh python và kết quả trả về 15
Hình 2.6 Script python với chương trình đơn giản 16
Hình 2.7 Cấp phát quyền và thực thi python cript trong Ubuntu 16
Hình 2.8 Các khả năng của OpenCV có thể là nhận diện khuôn mặt (trên bên trái), phát hiện đường đồng mức (trên bên phải), và phát hiện cạnh (phía dưới) 18
Hình 2.8 Kết nối board Intel Galileo bằng cổng COM và cách kết nối các chân 19
Hình 2.9 Hình ảnh thực tế của board Intel Galileo mặt trước (trái) và mặt sau (phải) 20
Hình 2.10 Sơ đồ khối hệ thống của board Intel Galileo 21
Hình 2.11 Vị trí các thành phần phần cứng trên board Intel Galileo 22
Hình 2.12 Vị trí các jumper trên board Intel Galileo 29
Hình 3.1 Kiến trúc tổng quát của hệ thống 30
Hình 3.2 Luồng dữ liệu và nối kết hệ thống 32
Hình 3.3 Bộ xử lý chính là board Intel Galileo 33
Hình 3.4 Bộ phận thu nhận ảnh webcam Logitech C920 được đặt cố định với một bàn điều khiển 34
Hình 3.6 Module LM2506 và ắc quy 12V - 4Ah 35
Hình 3.7 Module Dimerled dùng điều khiển các động cơ 35
Hình 3.8 Hình ảnh động cơ gạt nước dùng trong ô tô 35
Hình 3.9 Bố trí và lắp đặt động cơ gạt nước vào xe lăn của nhóm 36
Hình 3.10 Cơ cấu bánh răng và xích tải truyền lực từ đông cơ đến bánh xe 37
Hình 3.11 3D USB SOUND và HUB USB chia sẻ kết nối với webcam 37
Hình 3.12 Sơ đồ kết nối các khối của hệ thống 38
Hình 3.13 Toàn bộ các module phần cững được bố trí và cố định vào hộp bảo vệ 39
Hình 3.11 Lưu đồ giải thuật chương trình chính 40
Hình 3.11 Lưu đồ giải thuật chương trình con lấy lại mẫu tay 41
Hình 3.11 Lưu đồ giải thuật chương trình con lấy lại mẫu tay 42
Hình 3.12 Lưu đồ giải thuật chương trình con so sánh ảnh mẫu với các ảnh gốc 43
Hình 3.12 Lưu đồ giải thuật chương trình con kiểm tra lỗi cử chỉ điều khiển 44
Hình 3.13 Hai hình đen hoàn toàn 45
Hình 3.14 Cử chỉ nắm đấm được chụp lại nhưng kèm theo các sự vật không mong muốn 46
Hình 3.15 Hai cử chỉ được so sánh 46
Hình 3.16 Hai cử chỉ được xử lý sang ảnh nhị phân 47
Hình 3.17 Hai cử chỉ được xử lý sang ảnh nhị phân 47
Hình 3.18 Mẫu gốc 1, không có gì được đóng khung lại, tương ứng xe dừng 47
Hình 3.19 Mẫu gốc 2, cử chỉ bàn tay duỗi ngón cái khép, tương ứng xe được đi thẳng 48
Hình 3.20 Mẫu gốc 3, cử chỉ bàn tay duỗi ngón cái xòe, tương ứng xe được rẽ phải 48
Hình 3.21 Mẫu gốc 4, cử chỉ bàn tay nắm ngón cái xòe, tương ứng xe được rẽ trái 48
Hình 3.22 Mẫu gốc 5, cử chỉ bàn tay nắm ngón cái khép lại, tương ứng xe dừng và có còi 49
Hình 3.23 Hai ảnh thực tế giữa có LED nên và không có LED nền 49
Hình 3.24 Hai có LED nền được chuyển sang nhị phân được chia làm 4 phần 49
Hình 3.25 Hình ảnh LED nền bị lỗi từng điểm sang vì đặt quá gần 50
Hình 3.26 Hình ảnh mẫu đặt tay không đúng so với các mẫu gốc 50
Hình 3.27 Hình ảnh mẫu đặt tay không đúng so với các mẫu gốc đã được xử lý 50
Trang 9Hình 3.28 Ảnh tay khi đã xuất nhị phân và cắt 4 góc ảnh 51
Hình 3.29 Ảnh tay cái khi đã xuất nhị phân và cắt 4 góc ảnh 51
Hình 3.30 Ảnh đấm cái khi đã xuất nhị phân và cắt 4 góc ảnh 51
Hình 3.31 Ảnh nấm đấm khi đã xuất nhị phân và cắt 4 góc ảnh 52
Hình 3.32 Ảnh vật thể lạ sẽ được xử lý và so sánh với từng trạng thái mẫu 52
Hình 3.33 Ảnh nhị phân chưa làm mịn 52
Hình 3.34 Ảnh nhị phần đã được làm mịn 53
Hình 3.35 Ảnh hai mẫu tay 53
Hình 3.36 Ảnh hai mẫu tay đã được xử lý 53
Hình 3.37 Ảnh tay người bị khuyết tật 54
Hình 3.38 Các góc ảnh được cắt sau khi xuất nhị phân và làm mịn 55
Hình 3.39 Hệ thống xe lăn trong thực tế 56
Hình 3.40 Hình ảnh về nút nguồn của hệ thống 59
Hình 3.41 Hình ảnh về cảm biến chạm nhận dạng lựa chọn điều khiển của người sử dụng 59
Hình 3.42 Hệ thống LED hiển thị trạng thái 60
Hình 3.43 Mẫu 1 tương ứng với không có gì – xe dừng 60
Hình 3.44 Mẫu 2 tương ứng bàn tay khép – xe đi thẳng 61
Hình 3.45 Mẫu 3 tương ứng bàn tay khép có ngón cái mở ra – xe rẽ phải 62
Hình 3.46 Mẫu 4 tương ứng nấm đấm có ngón cái mở ra – xe rẽ trái 63
Hình 3.47 Mẫu 5 tương nấm đấm có ngón cái mở khép – xe phát kèn 64
MỤC LỤC BẢNG Bảng 2.1 Công dụng của các chân của một cổng nối tiếp 9 chân (9 pin) theo chuẩn AT và cách đấu nối chuyển đổi cổng nối tiếp 9 chân sang 25 chân 19
Bảng 2.2 Tóm tắt các thông số về dòng điện, điện thế board Intel Galileo 24
Trang 10TÓM TẮT
Với những người không may bị đột quỵ hay liệt bán thân thì việc đi lại là một điều khó khăn, phải di chuyển bằng xe lăn Ở mức độ liệt nặng, sức tay yếu không thể thao tác với cần điều khiển của xe, phải dùng các giải thuật hỗ trợ như: nhận dạng sự di chuyển của mắt, cử động tay hay bằng ý nghĩ Những giải thuật đó hầu hết dùng đến máy tính, có giá thành rất cao Bên cạnh đó, Intel vừa cho ra mắt bo vi điều khiển Intel Galileo, sản phẩm đầu tiên sử dụng chip Intel Quark X1000 với mục tiêu là xây dựng các ứng dụng Internet of Thing (IoT) Từ các tham khảo trên, nhóm chúng em quyết định chọn đề tài “Điều khiển xe lăn bằng cử động tay sử dụng board Intel Galileo” Mục tiêu là thiết kế một hệ thống có giá thành thấp, dùng Intel Galileo vẫn nhận dạng được cử chỉ của bàn tay để điều khiển xe lăn Đề tài cần một webcam kết nối với Intel Galileo chụp ảnh cử chỉ của bàn tay và xử lý qua phần mềm viết bằng Python chạy trên nền hệ điều hành Linux Kết quả dự kiến, xây dựng được hệ thống tự động thực thi chương trình mặc định, điều khiển xe lăn bằng cử động tay chuẩn theo bàn tay của mỗi người, điều kiện ánh sáng ổn định và độ trễ thời gian đáp ứng là cho phép
Từ khóa: Intel Galileo, Python, điều khiển xe lăn, cử động tay, xử lý ảnh
ABSTRACT
Who unfortunately had a stroke or hemiplegia, the travel is a difficult thing, must travel by wheelchair At a high level, the strength of hand has been decreased, can’t work with the joystick of a wheelchair, must be use of the algorithm supports such as identification of eye movements, hand gestures or by thought All the algorithms used to computers, have a very high cost Besides, Intel has launched the microcontroller boards Intel Galileo, the first products to use chip Intel Quark X1000 aimed building Applications Internet of Thing (IoT) From the above reference,
we decided to choosen the project “Wheelchair control by hand movements using Intel Galileo board” The objective is design a low-cost system, use Intel Galileo could recognize hand gestures to control the wheelchair The project need a webcam connected to Intel Galileo imaging of hand gestures and processed by software written
in Python that runs on Linux operating system Expected results, build a system to automatically execute load default programs, control a wheelchair by moving his hand standardized per person, light stability and latency time response was allowed
Keywords: Intel Galileo, Python, controlling wheelchair, hand movements, image
processing
Trang 11CHƯƠNG 1 TỔNG QUAN
Nội dung:
Giới thiệu đề tài, yêu cầu và mục đích lựa chọn đề tài
Quá trình hình thành và lịch sử giải quyết đề tài
Phạm vi về không gian, thời gian và các gói công cụ hỗ trợ thực hiện đề tài
Cách thức và phương thức tiến hành thực hiện đề tài
Mỗi năm Việt Nam có khoảng 200.000 người mắc bệnh lý tai biến mạch máu não, gần một nửa trong số họ mang các di chứng hậu tai biến suốt quãng đời còn lại Việc đi lại dường như trở nên khó khăn hơn, sử dụng xe lăn có lẽ là phương pháp di chuyển hiệu quả nhất đối với họ Ở mức độ bị liệt bán thân hoặc nặng hơn thì sức lực của bàn tay không còn đủ để có thể thao táo với cần điều khiển của các xe lăn truyền thống, phải dùng các giải thuật khác hỗ trợ việc điều khiển như: nhận dạng sự di chuyển của mắt, cử động tay hay bằng ý nghĩ Tuy nhiên những giải thuật này hầu hết phải thực hiện trên máy tính và đương nhiên là có giá thành rất cao
Đi cùng với sự tiến bộ của khoa học kĩ thuật, Intel vừa cho ra mắt bo Intel Galileo Đây là một bo mạch vi điều khiển chuyên dùng cho việc phát triển phần mềm
và phần cứng, tương tự như Andruino hay Raspberry Pi Galileo là sản phẩm đầu tiên
sử dụng chip Intel Quark X1000 Cũng tại CES 2014, Intel đã trình diễn Galileo với hệ thống điều khiển thiết bị điện tử qua kết nối internet không dây Và nó giống như các giải pháp nhà thông minh hay Internet of Things (IoT) Intel Galileo sẽ đóng vai trò
là một bộ điều khiển trung tâm, kết nối với các thiết bị điện tử, và kết nối với điện thoại hoặc máy tính bảng có chạy ứng dụng đặc biệt Từ ứng dụng này, người dùng có thể
ra lệnh đến các thiết bị nhờ Galileo Intel Galileo được hỗ trợ chạy hệ điều hành Linux rút gọn tương thích nên tìm năng của Galileo là rất lớn
Từ những phân tích đã trình bày, nhóm chúng em chọn đề tài “Điều khiển xe lăn
bằng cử động tay sử dụng board Intel Galileo” Bằng việc sử dụng Intel Galileo
xây dựng nên một xe lăn chạy bằng điện dùng những cử chỉ tay điều khiển xe lăn là một vấn đề khá mới mẻ Điều này đã tạo ra phương thức giao tiếp hoàn toàn mới giữa con người và các thiết bị, đề tài cũng mang lại những ý nghĩa nhân sinh nhất định, cũng như làm tư liệu cho các nghiên cứu cao hơn về sau
1.2 LỊCH SỬ GIẢI QUYẾT VẤN ĐỀ
Hiện nay trên thế giới có nhiều phiên bản xe lăn được tạo ra với các phương pháp điều khiển đặc trưng riêng biệt như: công nghệ điều khiển bằng joystick, bằng hơi thở, bằng lưỡi, bằng mắt hoặc suy nghĩ Xe điều khiển bằng joystick đòi hỏi người dùng phải điều khiển bằng tay hoặc một chi bị tật mà chi còn sức mạnh thì mới có thể điều khiển xe lăn bằng phương pháp này, không phù hợp cho người bị liệt yếu hết các chi hay người già Xe điều khiển bằng “hớp và thổi” như cách mà Christopher Reeve (tài tử từng nổi tiếng với vai siêu nhân) áp dụng trước khi qua đời vào năm 2004
Trang 12Theo đó, ông thổi vào một ống hút để làm xe lăn di chuyển tới lui, khi điều khiển xe
di chuyển gây ra những khó khăn trong việc hô hấp của chính người khiển Hay việc điều khiển xe lăn bằng lưỡi của các chuyên gia Mỹ tại Viện Công nghệ Georgia
đã nghiên cứu năm 2011, theo đó người sử dụng đeo bộ tai nghe có trang bị cảm biến nhằm thu nhận tín hiệu từ trường phát ra từ khuyên ở lưỡi Ví dụ, di chuyển lưỡi lên góc trên bên trái miệng thì xe tiến về phía trước Đương nhiên chi phí cho việc cấy ghép khuyên từ và bộ cảm biến xử lý là không hề nhỏ Xe lăn điều khiển bằng mắt được thực hiện ngay tại trường Đại học Cần Thơ của thầy Nguyễn Hữu Cường, Bộ môn Tự động hóa, Khoa Công nghệ năm 2011 và
ở Phòng Thí nghiệm Điều khiển tự động khoa Điện-Điện tử, Đại học Bách Khoa TPHCM năm 2013 thì lại có giá thành quá cao vì cần một bộ vi xử lý mạnh
để điều khiển Sáng kiến Aviator - công nghệ “xe lăn thông minh” của GS Hùng, Chủ nhiệm khoa Kỹ thuật và Công nghệ thông tin, Đại học Công nghệ Sydney (UTS),
xe lăn có thể điều khiển bằng sự chuyển động của đầu và sóng não con người được xem
là một trong những phát minh hàng đầu ở Úc Tất nhiên chi phí cho cả hệ thống đọc
và hiểu được suy nghĩ con người rất đắt đỏ, giá thành chiếc xe này ở Úc vào khoảng 15.000 USD
Khác với những đề tài điều khiển xe lăn đã được thực hiện trên thế giới, đề tài nhóm đã chọn và thực hiện mang ưu điểm và đặc trưng riêng biệt Phần cứng xử lý dùng bo Intel Galileo, một bo mạch vi điều khiển chuyên dùng cho việc phát triển phần mềm và phần cứng, tương tự như Andruino hay Raspberry Pi Galileo là sản phẩm đầu tiên sử dụng chip Intel Quark X1000, SoC đầu tiên thuộc dòng "Santa Clara" được sản xuất dựa trên dây chuyền công nghệ 14nm với mức độ tiêu thụ điện rất thấp Phần mềm dùng ngôn ngữ lập trình là Python, chương trình dùng giải thuật trừ ảnh kết hợp với lấy mẫu bàn tay riêng biệt của từng người nên mang lại độ chính xác cao
Đề tài khai thác ứng dụng OpenCV về nghiên cứu phát triển thị giác của máy tính Việc điều khiển xe lăn chỉ bằng những cử động tay đơn giản không cần sức lực, chi phí thực hiện thấp, có thể phát triển thành các ứng dụng điều khiển thiết bị khác Nhìn chung, đề tài đã kế thừa và cải tiến được một điểm hạn chế của những đề tài trước (độ tin cậy, chi phí, độ chính xác…) cũng như tạo sự khác biệt trong phong cách điều khiển các thiết bị cho tương lai
1.3 PHẠM VI ĐỀ TÀI
Đề tài được nghiên cứu dựa trên nền tảng các kiến thức căn bản về ngôn ngữ lập trình và vi điều khiển được học ở trường, cùng với việc tự tìm hiểu và học hỏi của các thành viên trong nhóm (2 thành viên) Hệ thống điều khiển của xe được thực hiện dựa trên board Intel Galileo kết nối với một webcam, một card âm thanh và các module hỗ trợ
Khi bắt đầu điều khiển xe, người sử dụng sẽ được hỗ trợ bằng giọng nói giúp họ nhanh nắm bắt cách thức hoạt động của xe Sau đó hình ảnh bàn tay khi điều khiển được chụp lại rồi gửi lên board Galileo và được chương trình viết bằng Python xử lý
Trang 13bằng giải thuật trừ ảnh và kiểm tra vùng trống, cuối cùng xuất điều khiển cho động cơ
Do giới hạn về kiến thức của từng thành viên và khuôn khổ thời gian thực hiện 4 tháng nên mục tiêu hướng đến của đề tài là tạo được một xe lăn giúp cho người khuyết tật, người già có thể di chuyển theo ý muốn của họ, trong đó việc điều khiển xe chỉ bằng những cử chỉ đơn giản của bàn tay không cần dùng nhiều sức lực và bàn tay phải đặt trong một phạm vi khu vực cố định dưới sự ghi nhận của webcam
Quá trình thực hiện đề tài được thực hiện tuần tự theo các bước sau:
Tìm hiểu các thành phần và phương thức giao tiếp trên board Intel Galileo
Tìm hiểu về hệ điều hành Linux chạy trên board Intel Galileo, cách kết nối với PC và các thiết bị ngoại vi như: webcam, card âm thanh, …
Tìm hiểu về ngôn ngữ lập trình Python và OpenCV
Thiết kế lắp đặt các phần cứng trên xe lăn
Khảo sát kết quả thực tế và hoàn thiện hệ thống
Kết quả và đánh giá
Trang 14CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
Nội dung:
Tổng quan về xử lý ảnh
Python va OpenCV
Sơ lược về cổng COM
Giới thiệu board Intel Galileo
2.1 TỔNG QUAN VỀ XỬ LÝ ẢNH
Xử lý ảnh là một lĩnh vực mang tính khoa học và công nghệ Nó là một ngành khoa học mới mẻ so với nhiều ngành khoa học khác nhưng tốc độ phát triển của nó rất nhanh, kích thích các trung tâm nghiên cứu, ứng dụng, đặc biệt là máy tính chuyên dụng riêng cho nó
Quá trình xử lý ảnh là quá trình thao tác ảnh đầu vào nhằm cho ra kết quả mong muốn Kết quả đầu ra của một quá trình xử lý ảnh có thể là một ảnh “tốt hơn” hoặc một thông tin
2.1.1 Khái niệm về điểm ảnh - ảnh số
Gốc của ảnh (ảnh tự nhiên) là ảnh liên tục về không gian và độ sáng Để xử lý bằng máy tính (số), ảnh cần phải được số hóa Số hóa ảnh là sự biến đổi gần đúng một ảnh liên tục thành một tập điểm phù hợp với ảnh thật về vị trí (không gian) và độ sáng (mức xám) Khoảng cách giữa các điểm ảnh đó được thiết lập sao cho mắt người không phân biệt được ranh giới giữa chúng Mỗi một điển như vậy gọi là một điểm ảnh (PEL: Picture Element) hay còn gọi tắt là Pixel Trong khuôn khổ ảnh hai chiều, mỗi pixel ứng với cặp tọa độ (x,y), mỗi điểm ảnh tương ứng với một phần tử trong
Điểm ảnh (Pixel) là một phần tử của ảnh số tại tọa độ (x,y) với mức độ xám hoặc màu nhất định Kích thước và khoảng cách giữa các điểm ảnh đó được chọn thích hợp sao cho mắt người cảm nhận sự liên tục về không gian và mức xám (hoặc màu) của ảnh số gần như ảnh thật Mỗi phần tử trong ma trận được gọi là một phần tử của ảnh
Định nghĩa: Độ phân giải (Resolution) của ảnh là mật độ điểm ảnh được ấn định trên một ảnh số được hiển thị
Trang 15Theo định nghĩa, khoảng cách giữa các điểm ảnh phải được chọn sao cho mắt người vẫn thấy được sự liên tục của ảnh Việc lựa chọn khoảng cách thích hợp tạo nên một mật độ phân bổ, đó chính là độ phân giải và được phân bố theo trục x và y trong không gian hai chiều
Ví dụ: Độ phân giải của ảnh trên màn hình CGA (Color Graphic Adaptor)
là một lưới điểm theo chiều ngang màn hình: 320 điểm chiều dọc * 200 điểm ảnh (320*200) Rõ ràng, cùng màn hình CGA 12” ta nhận thấy mịn hơn màn hình CGA 17”
độ phân giải 320*200 Lý do: cùng một mật độ (độ phân giải) nhưng diện tích màn hình rộng hơn thì độ mịn (liên tục của các điểm) kém hơn
2.1.3 Mức xám của ảnh
Một điểm ảnh (pixel) có hai đặc trưng cơ bản là vị trí (x, y) của điểm ảnh
và độ xám của nó Dưới đây chúng ta xem xét một số khái niệm và thuật ngữ thường dùng trong xử lý ảnh
Định nghĩa: Mức xám của điểm ảnh là cường độ sáng của nó được gán bằng giá trị số tại điểm đó
Các thang giá trị mức xám thông thường: 16, 32, 64, 128, 256 (Mức 256
là mức phổ dụng Lý do: từ kỹ thuật máy tính dùng 1 byte (8 bit) để biểu diễn mức xám: Mức xám dùng 1 byte biểu diễn: 28 = 256 mức, tức là từ 0 đến 255)
2.1.4 Phân loại ảnh
Ảnh nhị phân: ảnh chỉ có 2 mức đen trắng phân biệt, tức dùng 1 bit mô tả
21 mức khác nhau Nói cách khác: mỗi điểm ảnh của ảnh nhị phân chỉ có thể
là 0 hoặc 1.Một ảnh nhị phân được lưu trữ như một mảng lôgíc của 0 và 1
Hình 2.1 Ảnh nhị phân và nhị phân đảo của bàn tay
Ảnh xám: hay còn gọi là ảnh đơn sắc là ảnh mà tại mỗi điểm ảnh có một giá trị
mức xám (không chứa màu khác) và khác hoàn toàn với ảnh nhị phân Ảnh 8 mức xám sẽ có giá trị mỗi điểm ảnh nằm trong đoạn [0, 7] Ảnh 256 mức xám
sẽ có giá trị mỗi điểm ảnh nằm trong đoạn [0, 255] Giá trị điểm ảnh = 0 nghĩa
Trang 16là điểm ảnh đó tối (đen), giá trị điểm ảnh lớn nhất nghĩa là điểm ảnh đó trắng Nói cách khác, giá trị mỗi điểm ảnh càng lớn thì điểm ảnh đó càng sáng
Hình 2.2 Ảnh xám của một chú chó sói
Ảnh màu: mô hình bổ sung các loại ánh sáng đỏ, xanh lá cây và xanh lam
được tổ hợp với nhau theo nhiều phương thức khác nhau để tạo nên thế giới màu
Hình 2.3 Mô hình màu RGB
Từ viết tắt RGB trong tiếng Anh có nghĩa là đỏ (red), xanh lá cây (green)
và xanh lam (blue), là ba màu gốc trong các mô hình ánh sáng bổ sung Cũng lưu ý rằng mô hình màu RGB tự bản thân nó không định nghĩa thế nào là "đỏ",
"xanh lá cây" và "xanh lam" một cách chính xác, vì thế với cùng các giá trị như nhau của RGB có thể mô tả các màu tương đối khác nhau trên các thiết bị khác nhau có cùng một mô hình màu Trong khi chúng cùng chia sẻ một
mô hình màu chung, không gian màu thực sự của chúng là dao động một cách đáng kể Các phần cứng hiển thị điển hình được sử dụng cho các màn hình máy tính trong năm 2003 sử dụng tổng cộng 24 bit thông tin cho mỗi điểm ảnh (trong tiếng Anh thông thường được biết đến như bits per pixel hay bpp)
Nó tương ứng với mỗi 8 bit cho màu đỏ, xanh lá cây và xanh lam, tạo thành một tổ hợp 256 các giá trị có thể có, hay 256 mức cường độ cho mỗi màu Với hệ thống như thế, khoảng 16,7 triệu màu rời rạc có thể tái tạo
Trang 17Một mảng RGB có thể thuộc lớp double, uint8 hoặc uint16 Trong một mảng RGB thuộc lớp double, mỗi thành phần màu có giá trị giữa 0 và 1 Một pixel
mà thành phần màu của nó là (0,0,0) được hiển thị với màu đen và một pixel
mà thành phần màu là (255,255,255) được hiển thị với màu trắng
Hình 2.4 Ảnh màu của hai chú chim trên cành cây
2.1.5 Xử lý ảnh và các phương pháp xử lý ảnh
Xử lý ảnh là một loạt các thao tác phân tích ảnh bằng máy tính để có được một thông tin mong muốn nào đó hay cải thiện chất lượng ảnh cho tốt hơn (rõ ràng hơn) Một vài ví dụ về xử lý ảnh, buổi sáng đi làm và bạn đến công ty sau đó kiểm tra dấu vân tay Đó là xử lý và nhận dạng dấu vân tay Nghỉ trưa, bạn vào facebook
và đăng một bức ảnh chụp cùng bạn bè Facebook tự động hỗ trợ tag từng người
Đó là xử lý và nhận diện khuôn mặt Chiều về đi metro, bạn gửi xe và chẳng thấy ai cầm bút ghi vé Đó là nhờ có hệ thống tự động đọc biển số xe thông qua nhận dạng chữ số Tối về bật tivi xem đá bóng, bạn thấy trong các tình huống phân tích trận đấu, việc di chuyển của các cầu thủ được đánh dấu khoanh tròn dưới chân Đó là kỹ thuật tracking trong xử lý video Những ví dụ đã đưa ra là minh chứng cho sự hiện diện của xử lý ảnh trong cuộc sống của chúng ta và hãy gọi chung cho nó một cụm từ là
“Xử lý ảnh”
Trừ ảnh (Pixel Subtraction): Ta có 2 ảnh A và B có cùng kích thước
và mức sáng Trừ hai ảnh A và B là việc tính toán sự sai khác giữa hai ảnh đó
Sự sai khác này có thể được tính dựa trên giá trị điểm ảnh, histogram, hoặc sai khác thống kê Trong các kỹ thuật trừ ảnh, chúng ta giả sử các khung hình có kích thước x*y Phương pháp đơn giản nhất để trừ hai khung hình là tính giá trị biểu diễn sự chênh lệch tổng cộng về cường độ của tất cả các điểm ảnh tương ứng trên hai khung hình Được áp dụng
để phát hiện lỗi và phát hiện chuyển động
Cộng ảnh (Pixel Addition): Tương tự như kỹ thuật trừ ảnh, phương pháp đơn giản là cộng giá trị từng pixel tương ứng trên 2 khung hình có kích thước
Trang 18x*y Được áp dụng để làm tăng độ sáng (cộng với chính ảnh đó) hoặc giảm nhiễu từ một loạt ảnh
Tích chập (Convolution): Tích chập là một phép toán thông dụng trong
xử lý ảnh, được sử dụng phổ biến trong các bài toán dò biên (edge detection)
và lọc tuyến tính (linear filter) Kết quả của tích chập là giá trị của pixel trung tâm thông qua phép tính dựa trên các pixel lân cận và chính pixel trung tâm đó
Lọc ảnh (Filtering): Dựa vào kỹ thuật tích chập, sử dụng mặt nạ (bộ lọc) phù hợp để loại bỏ hoặc giữ lại một số đặc điểm của ảnh Lọc hạ thông
(Low-pas Filter), giữ lại những thành phần tần số thấp, làm mất đi nhiễu
và chi tiết Được áp dụng để làm trơn ảnh hoặc khử nhiễu Lọc thượng thông
(High-pas Filter), giữ lại những thành phần tần số cao, làm rõ chi tiết và
đường biên Được áp dụng để tim đường biên của ảnh Lọc trung bình
(Average Filter), Có tất cả các trọng số đều bằng nhau, thay thế giá trị
1 điểm ảnh bằng giá trị trung bình của các điểm ảnh lân cận
Phân ngưỡng (Thresholding): Mục đích chuyển ảnh mức xám về nhị phân,
ngưỡng đóng vai trò quyết định đến hiệu quả của việc nhị phân hóa ảnh Giá trị ngưỡng của mỗi ảnh là khác nhau và phụ thuộc vào nhiều yếu tố Một ngưỡng được xem là tốt nếu sau quá trình phân ngưỡng ảnh thu được có thể giữ lại những chi tiết mong muốn và loại bỏ các chi tiết thừa
2.1.6 Quy trình xử lí ảnh
Xét các bước trong hệ thống xử lý ảnh số Đầu tiên ảnh từ thế giới bên ngoài được thu nhận qua các thiết bị thu ảnh như camera, máy chụp ảnh Trước đây ảnh thu được qua camera là ảnh tương tự nhưng gần đây với sự phát triển của công nghệ, ảnh màu hay ảnh đen trắng lấy được từ camera sau đó được chuyển trực tiếp thành ảnh số tạo thuận lợi cho xử lý tiếp theo Mặt khác ảnh có thể thu được từ vệ tinh hoặc máy quét ảnh
Thu nhận ảnh (Image Acquisition): Ảnh có thể thu được qua camera, webcam
hay máy scan hoặc từ video
Tiền xử lý ảnh (Image Pre-processing): Sau khi nhận ảnh, ảnh có thể bị nhiễu
do môi trường nên cần loc nhiễu cho ảnh, nâng độ tương phản để làm ảnh
rõ nét hơn
Phân đoạn ảnh(Segmentation): Phân đoạn ảnh là tách một ảnh đầu vào thành
các vùng thành phần ddeeer biễu diễn , phân tích, nhận dạng ảnh
Biểu diễn ảnh: Đầu ra ảnh sau phân đoạn chứa các điểm ảnh của vùng ảnh
đã phân đoạn cộng với mã liên kết với các vùng lân cận Việc biến đổi các số liệu này thành dạng thích hợp là cần thiết cho xử lý tiếp theo bằng máy tính Việc chọn các tính chất để thể hiện ảnh gọi là trích chọn đặc trưng gắn với việc tách lớp đối tượng này với đối tượng khác trong phạm vi ảnh nhận được
Trang 19 Nhận dạng và nội suy hình ảnh (Image Recognition and Interpretation):
Nhận dạng ảnh là quá trình xác định ảnh Quá trình này thường thu được bằng cách so sánh với mẫu chuẩn đã được lưu từ trước Nội suy là phán đoán theo ý nghĩa trên cơ sở nhận dạng
2.2 PYTHON VÀ OPENCV
2.2.1 Python
2.2.1.1 Giới thiệu về Python
Python là ngôn ngữ kịch bản hướng đối tượng (object-oriented scripting language) Không chỉ vậy, nó còn là một ngôn ngữ cấp cao có khả năng thông dịch (interpreted language) và có tính tương tác (interactive language) cao
Nhờ chức năng thông dịch mà trình thông dịch (Interpreter) của Python có thể
xử lý lệnh tại thời điểm chạy chương trình (runtime) Nhờ đó mà ta không cần biên dịch chương trình trước khi thực hiện nó (tương tự như Perl và PHP)
Tính năng tương tác của Python giúp ta có thể tương tác trực tiếp với trình thông dịch của nó ngay tại dấu nhắc lệnh Cụ thể: Ta có thể thực hiện lệnh một cách trực tiếp tại dấu nhắc của Python
Python hỗ trợ mạnh cho phong cách lập trình hướng đối tương và kỹ thuật lập trình gói mã trong đối tượng
Mặc dầu Python được xem là ngôn ngữ lập trình dành cho những ai mới làm quen với việc lập trình trên máy tính, nhưng nó hỗ trợ mạnh cho việc phát triển nhiều loại ứng dụng khác nhau, từ các chương trình xử lý văn bản đơn giản đến các ứng dụng web, đến các chương trình game,…
Python được phát triển tại Viện Nghiên cứu Quốc gia về Toán học và Khoa học Máy tính Hà Lan bởi Guido van Rossum vào những năn 80-90 của thế kỷ trước Hiện nay Python được duy trì và phát triển bởi nhóm phát triển core của viện này Python được phát triển từ nhiều ngôm ngữ khác nhau: ABC, Modula-3, C, C++, Algol-68, SmallTalk, Unix shell và các ngôn ngữ script khác
Tương tự như Perl, Python là ngôn ngữ có bản quyền, hiện nay mã nguồn của nó được phát hành theo GNU - General Public License (GPL)
Ngoài các chức năng thông thương của một ngôn ngữ lập trình hiện đại như:
Dễ học, dễ đọc mã nguồn, dễ phát triển, dễ tương tác với hệ thống/với mạng, chạy đa nền, nhúng được trong nhiều ngôn ngữ lập trình cấp cao, tương tác với hầu hết các hệ quản trị cơ sở dữ liệu,… Python còn có các chức năng nổi trội sau đây:
Một trong những điểm mạnh nhất của Python đến từ thư viện chuẩn của nó: Một thư viện lớn, dễ sử dụng có tính tương thích cao và đặc biệt hoạt động
đa nền: UNIX, Windows and Macintosh
Python có thể được sử dụng như ngôn ngữ script, hoặc ngôn ngữ biên dịch, nhờ đó mà ta có thể buil các chương trình lớn trên nó
Trang 20 Python hỗ trợ chế độ Interactive, nhờ đó mà ta có thể nhập kết quả
từ các đầu cuối khác nhau vào chương trình Python, nhờ đó mà việc test
và debug lỗi code trở nên đơn giản hơn
Python cho phép người lập trình tích hợp (add-on) các mô-đun cấp thấp, các tool tùy chọn vào trình thông dịch của nó Điều này giúp cho việc lập trình trên Python trở nên dễ dàng và hiệu quả hơn
2.2.1.2 Cách thức cài đặt và sử dụng
Ban đầu, Python được phát triển để chạy trên nền Unix Nhưng rồi theo thời gian,
nó đã “bành trướng” sang mọi hệ điều hành từ MS-DOS đến Mac OS, OS/2, Windows, Linux và các hệ điều hành khác thuộc họ Unix Mặc dù sự phát triển của Python
có sự đóng góp của rất nhiều cá nhân, nhưng Guido van Rossum hiện nay vẫn là tác giả chủ yếu của Python Ông giữ vai trò chủ chốt trong việc quyết định hướng phát triển của Python
Hiện nay Python đã phát triển đến version 3.x Dưới đây sẽ là cách cài đặt Python trên Ubuntu File cài đặt Python có thể download tại: http://www.python.org/download/
Cài đặt Python 3.3 trên Ubuntu:
Cách 1: Cài đặt trực tiếp bằng tập lệnh thực thi trong terminal
Bước 1: $ sudo apt-get update
Bước 2: $ sudo apt-get upgrade
Bước 3: $ sudo apt-get install python3.3
Cách 2: Cài đặt các phụ thuộc, tải và sau đó cài đặt
Bước 1: Cài đặt các phụ thuộc: sudo apt-get build-dep python3.2
&& sudo apt-get install libreadline-dev libncurses5-dev libssl1.0.0
tk8.5-dev zlib1g-dev liblzma-de
Bước 2: Download Python 3.3.0: wget
http://python.org/ftp/Python/3.3.0/Python-3.3.0.tgz
Bước 3: Giải nén file Python-3.3.0.tgz: tar xvfz Python-3.3.0.tgz
Bước 4: Cấu hình và cài đặt: cd Python-3.3.0 && /configure
prefix=/opt/python3.3 && make && sudo make install
Bước 5: Kiểm tra sau khi cài đặt: cd /opt/python3.3/bin/python3
Nếu việc cài đặt là thành công mở terminal và thực thi lệnh như hình 2.5,
sẽ nhận được kết quả tương tự
Hình 2.5 Thực thi lệnh python và kết quả trả về
Trang 21Theo mặc định, Python được cài vào thư mục: /usr/local/bin và các thư viện của nó được cài vào thư mục: /usr/local/lib/python3.3
Ta có thể đặt các file chương trình, các file có thể thực thi của Python ở một thư mục khác Khi đó ta phải sử dụng biến moi trường PATH để chỉ đến thư mục này
Sử dụng lệnh sau đây trong bash shell để thiết lập lại đường dẫn:
cơ bản nhất quả Python
Cách gọi trình biên dịch với các thông số bắt đầu thực hiện script và tiếp tục cho đến khi script kết thúc Khi script kết thúc, trình thông dịch không còn hoạt động Hãy viết một đoạn Python đơn giản Mọi tập tin đều có đuôi là py Và cũng đưa toàn bộ mã nguồn trong tập tin test.py
Hình 2.6 Script python với chương trình đơn giản
Tiến hành cấp phát quyền và thực thi python script Chúng ta sẽ nhận được kết quả như hình 2.7
Hình 2.7 Cấp phát quyền và thực thi python cript trong Ubuntu
2.2.2 OpenCV
OpenCV là một thư viện xử lý ảnh mã nguồn mở của Intel,nó có khả năng nhúng được vào trong các chương trình của máy tính Nó bao gồm khả năng tiên tiến như phát hiện khuôn mặt, theo dõi khuôn mặt, nhận diện khuôn mặt, lọc Kalman… Ngoài ra, nó cung cấp rất nhiều các thuật toán xử lý ảnh thông qua các hàm API
và thể hiện sự đa dạng của trí tuệ nhân tạo
Intel phát hành phiên bản đầu tiên của OpenCV vào năm 1999 Ban đầu, nó yêu cầu như là thư viện xử lý hình ảnh của Intel Nhưng các vấn đề phụ thuộc đã được
gỡ bỏ và bây giờ bạn có thể sử dụng OpenCV là một thư viện độc lập
Trang 22OpenCV hỗ trợ đa nền tảng Nó hỗ trợ cả Windows và Linux, và gần đây hơn là MacOSX Giao diện của nó là nền tảng độc lập OpenCV là công cụ hữu ích cho những người bước đầu làm quen với xử lý ảnh số vì các ưu điểm sau:
Image and Video I/O: Những giao diện này sẽ giúp bạn đọc dữ liệu ảnh từ file
hoặc trực tiếp từ video Bạn cũng có thể tạo các file ảnh và video với
giao diện này
Thị giác máy và các thuật toán xử lí ảnh (General computer-vision and
image-processing algorithms(mid – and low level APIs)): Sử dụng những giao diện
này, bạn có thể thực hành với rất nhiều chuẩn thị giác máy mà không cần phải
có mã nguồn của chúng
Modul thị giác máy ở cấp độ cao: Thêm vào nhận dạng mặt, dò tìm, theo dõi
Nó bao gồm luồng thị giác (sử dụng camera di động để xác định cấu trúc 3D)
và âm thanh nổi
AI and machine-learning: Các ứng dụng thị giác máy thường yêu cầu máy móc
phải học (machine-learning) hoặc các hình thức trí tuệ nhân tạo khác Một vài
trong số chúng là có sẵng trong gói OpenCV
Lấy mẫu ảnh và phép biến đổi: Nó thường rất cần thiết cho quá trình xử lý một
nhóm các phần tử ảnh như là một đơn vi OpenCV bao gồm lấy tách ra, lấy mẫu ngẫu nhiên, phục chế, xoay ảnh, làm cong ảnh, thay đổi hiệu ứng của ảnh
Tạo và phân tích ảnh nhị phân: Ảnh nhị phân thường được dùng trong các
hệ thống kiểm tra khuyết điểm hình dạng hoặc các bộ phận quan trọng
Sự biễu diễn ảnh cũng rất thuận tiện khi chúng ta biết rõ vật thể cần bắt
Cách thức tính toán thông tin 3D (methods for computing 3D information):
Những hàm này rất ích khi xác định và sắp xếp một khối lập thể hoặc
từ một không gian nhìn phức tạp từ một camera riêng
Các phép toán xử lý ảnh, thị giác máy và biễu diễn ảnh: OpenCV sử dụng các phép toán phổ biến như đại số học, thống kê và tính toán hình học
Đồ họa: Những giao diện này giúp bạn có thể vẽ và viết chữ lên hình ảnh
Thêm vào đó chức năn máy được sử dụng nhiều trong ghi nhãn và đánh giấu
Ví dụ, nếu bạn viết một chương trình nhận dạng nhiều đối tượng thì nó sẽ rất
có ích cho tạo nhãn ảnh (label image) với kích thước và vị trí
Phương thức giao tiếp mới với máy: OpenCV bao gồm của sổ giao diện của
chính bản thân nó, được so sánh giới hạn và khả năng thực hiện trong mỗi môi trường Chúng cung cấp những môi trường đa phương tiện và đơn giản để hiển thị hình ảnh, cho phép người dùng nhập dữ liệu từ bàn phím, chuột và điều khiển quá trình
Trang 23OpenCV là công cụ chuyên dụng được phát triển theo hướng tối ưu hóa cho các ứng dụng xử lí và phân tích ảnh, với cấu trúc dữ liệu hợp lý, thư viện tạo giao diện, truy xuất thiết bị phần cứng được tích hợp sẵn
Hình 2.8 Các khả năng của OpenCV có thể là nhận diện khuôn mặt
(trên bên trái), phát hiện đường đồng mức (trên bên phải), và phát hiện cạnh
(phía dưới)
OpenCV thích hợp để phát triển nhanh ứng dụng OpenCV là công cụ
mã nguồn mở: Không chỉ là công cụ miễn phí (với BSD license), việc được xây dựng trên mã nguồn mở giúp OpenCV trở thành công cụ thích hợp cho nghiên cứu
và phát triển, với khả năng thay đổi và mở rộng các mô hình, thuật toán
OpenCV đã được sử dụng rộng rãi: Từ năm 1999 đến nay, OpenCV đã thu hút được một lượng lớn người dùng, trong đó có các công ty lớn như Microsoft, IBM, Sony, Siemens, Google và các nhóm nghiên cứu ở Standford, MIT, CMU, Cambridge Nhiều forum hỗ trợ và cộng đồng người dùng đã được thành lập, tạo nên kênh thông tin rộng lớn hữu ích cho việc tham khảo tra cứu
2.3 KIẾN THỨC VỀ CỔNG COM
Cổng cổng nối tiếp (Serial port – DE9) là một cổng thông dụng trong các máy tính truyền thống dùng kết nối các thiết bị ngoại vi với máy tính như: bàn phím, chuột điều khiển, modem, máy quét Cổng nối tiếp còn có tên gọi khác như: Cổng COM, communication
Mặc dù khái niệm cổng nối tiếp có thể được hiểu theo một nghĩa khác: Các cổng hoạt động theo nguyên lý "nối tiếp" từng bit một, nhưng bài này chỉ nói đến các loại cổng nối tiếp được hiểu như COM, RS-232 mà không phải nói đến một nghĩa rộng hơn nó
Ứng dụng cổng COM trong sử dụng thông thường của một máy tính:
Bàn phím máy tính (trước đây)
Trang 24 Chuột điều khiển (trước đây, hiện nay bàn phím và chuột sử dụng các cổng PS/2 hoặc USB)
Modem (quay số)
Ứng dụng cổng COM trong các chuyên ngành khác
Kết nối với các thiết bị điều khiển (các cổng RS-232, RS-422 ) trong ngành tự động hoá điều khiển (Sự biến mất của các cổng nối tiếp hiện nay trên các máy tính khiến cho nhiều kỹ thuật viên gặp khó khăn với các thiết bị điều khiển cũ)
Kết nối với các thiết bị điện tử dân dụng
Kết nối với các điện thoại thông minh
Bảng 2.1 Công dụng của các chân của một cổng nối tiếp 9 chân (9 pin)
theo chuẩn AT và cách đấu nối chuyển đổi cổng nối tiếp 9 chân sang 25 chân
Cổng nối tiếp thường được tích hợp sẵn trên các máy tính cá nhân từ giữa năm
1990 trong các hệ thống máy tính cá nhân sử dụng CPU thế hệ thứ tư (486) Chúng thường được tích hợp sẵn trên các bo mạch chủ thông qua chíp Super I/O (thay cho các chíp UART trước đây) để thuận tiện hơn mà không cần sử dụng các bo mạch riêng cho chúng Ứng dụng kết nối thiết bị của cổng COM trong hình 2.9
Hình 2.8 Kết nối board Intel Galileo bằng cổng COM và cách kết nối các chân
Trang 252.4 GIỚI THIỆU VỀ BOARD INTEL GALILEO
2.4.1 Các thành phẩn trên board Intel Galileo
Intel Galileo là một bo mạch vi điều khiển chuyên dùng cho việc phát triển phần mềm và phần cứng tương tự như Andruino hay Raspberry Pi Do Intel trưc tiếp phát triển và là sản phẩm đầu tiên được đội ngũ phát triểnArduino chứng nhận đạt chuẩn tương thích với nền tảng Arduino
Hình ảnh thực tế và sơ đồ khối của board Intel Galileo thể hiện trong hình 2.9 và 2.10
Hình 2.9 Hình ảnh thực tế của board Intel Galileo mặt trước (trái) và mặt sau
(phải)
Trang 26Hình 2.10 Sơ đồ khối hệ thống của board Intel Galileo
Trang 27Sơ lược về các thành phần phần cứng trên board Intel Galileo:
Hình 2.11 Vị trí các thành phần phần cứng trên board Intel Galileo
Chip Intel Quark SoC X1000
Bộ xử lí 400Mhz Intel Pentium 32-bit tương thích với kiến trúc
tập lệnh ISA (ISA-compatible)
16KB bộ nhớ đệm L1
512KB bộ nhớ SRAM on-die embedded
Dễ dàng lập trình: đơn luồng, đơn nhân, xung nhịp cố định (single thread, single core, constant speed)
Mạch thời gian thực tích hợp (RTC intergrated) với 1 pin nút áo 3V
Max TDP 2.2W
Cổng PCI Express mini-card với chuẩn PICe 2.0 Có thể hoạt động với card mini-PCIe half-sized với tùy chọn chuyển đổi Cung cấp cổng USB 2.0 Host tương đương ở cổng mini-PCIe
Cổng kết nối USB 2.0 Host Hỗ trợ tới 128 thiết bị USB đầu cuối
Cổng kết nối USB Client dùng để lập trình Ngoài chức năng là một cổng lập trình, nó cũng có thể đóng vai trò như một USB Host chuẩn 2.0
Cổng Ethernet 100Mb
Khe cắm thẻ nhớ Micro-SD Tùy chọn thẻ nhớ ngoài SD có thể cung cấp lên tới 32GB dung lượng lưu trữ
Cổng Serial RS-232
10 chân header chuẩn JTAG hỗ trợ việc dò lỗi hệ thống
Nút Reboot dùng để reboot vi xử lí trung tâm
Trang 28 Ngoài ra, ở dưới mạch Galileo còn có một cổng PCIe (Peripheral
Component Interconnect Express) Cổng này sử dụng để gắn card màn hình, card Wifi vào Nghĩa là với card Wifi này bạn sẽ dễ dàng cài đặt Galileo truy cập vào một Access Point (router Wifi) nào đó mà không cần
sử dụng một cục thu wifi (router Client) qua cổng LAN (Ethernet)
Tùy chọn lưu trữ:
8MB Legacy SPI Flash dùng để lưu trữ firmware hay bootloader cũng như chương trình Arduino Khoảng 256KB đến 512KB được tách ra từ 8MB này để lưu trữ chương trình Arduino cuối cùng được tải lên Các chương trình Arduino được tải lên từ máy tính được xử lí một cách tự động, bạn không cần phải thao tác gì trừ khi có một sự thay đổi nào đó được thêm vào firmware
512KB bộ nhớ SRAM nhúng được mở mặc định bởi firmware
256MB DRAM được mở mặc định bởi firmware
Lưu trữ USB có thể làm việc với bất kì ổ đĩa USB 2.0 nào tương thích
11KB EEPROM có thể được lập trình qua thư viện EEPROM
Các tính năng hỗ trợ cho Arduino Shield:
14 chân Digital I/O, trong đó 6 chân có thể phát xung PWM với tần số lên đến 24 MHz Có thể được sử dụng ở cả 2 chế độ INPUT và
OUTPUT,
sử dụng được với các hàm pinMode(), digitalWrite() và digitalRead() như trên các mạch Arduino Các chân giao tiếp có thể hoạt động ở 2 mức điện áp 3.3V và 5V Dòng cấp tối đa là 10mA, dòng đỉnh là 25
mA Mỗi chân đều có một điện trở pull-up trong có trị số khoảng 5.6k đến 10k ohms Mặc định, các điện trở này bị ngắt
6 chân Analog từ A0 đến A5 giao tiếp qua chip AD7298 (chuyển đổi Analog-to-Digital)
Mỗi chân Analog có thể cung cấp độ phân giải 12bit với 4096 giá trị khác nhau
I2C bus, TWI với 2 chân SDA và SLC nằm cạnh chân AREF
TWI: gồm 2 chân SDA (A4) và SCL (A5) Hỗ trợ giao tiếp TWI thông qua thư viện Wire tương tự như trên Arduino
SPI: chạy ở xung mặc định là 4Mhz để làm việc với các Arduino shield, có thể lập trình lên đến mức 25Mhz
UART (cổng Serial): là một cổng UART với tốc độ có thể lập trình được, 2 chân giao tiếp là 0 (RX) và chân 1 (TX)
ICSP (SPI): gồm 6 chân tích hợp Serial Programming dùng để kết nối với các shield Các chân này hỗ trợ giao tiếp SPI thông qua thư viện SPI
Trang 29 VIN: chân cấp nguồn cho Galileo khi nó sử dụng nguồn ngoài (trái ngược với điện áp chuẩn 5V từ chân cắm nguồn) Bạn có thể cấp nguồn cho Galileo từ chân này, hoặc, nếu cấp nguồn từ chân cắm nguồn phía trước, bạn có thể lấy ra điện áp chuẩn 5V từ chân này
Chân 5V output: chân này cấp nguồn ra 5V từ nguồn ngoài cấp
cho Galileo hay từ nguồn USB Dòng ra tối đa ở chân này cho các shield là 800mA
Chân 3.3V output: cấp điện áp ra 3.3V được điều chế từ các mạch điều
áp trên Galileo Dòng ra tối đa ở chân này cho các shield là 800mA
Năng lượng: Được cung cấp bởi bộ chuyển đổi AC-to-DC adaper, kết nối với Galileo qua jack cắm 2.1mm (cực dương ở giữa) Điện áp sử dụng là 5V và cường độ dòng điện có thể đạt đến 3A
Bảng 2.2 Tóm tắt các thông số về dòng điện, điện thế board Intel Galileo
GND: chân nối cực âm của nguồn điện
IOREF: cho phép các shield điều chỉnh hoạt động phù hợp với điện áp hoạt động trên Galileo Chân IOREF được kiểm soát bởi các jumper trên mạch để lựa chọn 2 mức điện áp làm việc của shield là 3.3V và 5V
RESET: chân/nút nhấn RESET Kéo chân này xuống GND để reset chương trình Arduino đang chạy trên Galileo Dùng để reset chương trình Arduino đang chạy hay bất kì shield nào đang kết nối
AREF: không được sử dụng trên Galileo Trên Arduino, chân này cung cấp một điện áp tham chiếu ngoài cho các chân đọc tín hiệu analog Galileo không thể điều chỉnh điện áp đỉnh (upper end) của độ rộng tín hiệu analog đi vào bằng chân AREF hay
hàm analogReference()
Tại CES 2014, Intel đã trình diễn Galileo với hệ thống điều khiển thiết bị điện tử qua kết nối không dây Và nó giống như các giải pháp nhà thông minh hay Internet of Things hiện tại Intel Galileo sẽ đóng vai trò là một bộ điều khiển trung tâm, kết nối với
Trang 30các thiết bị điện tử, và kết nối với điện thoại hoặc máy tính bảng có chạy ứng dụng đặc biệt Từ ứng dụng này, người dùng có thể ra lệnh đến các thiết bị nhờ Galileo
Trong vòng một năm tới, Intel sẽ cung cấp 50.000 bo mạch Galileo cho hơn 1.000 trường đại học trên toàn thế giới để các sinh viên hay nhà nghiên cứu cùng góp phần tạo ra những sản phẩm dựa trên Galileo Giá bán lẻ của Intel Galileo hiện khoảng 2.200.000đ khi về tới Việt Nam
2.4.2 Giao tiếp với Intel Galileo
Galieo có thể dễ dàng kết nối với máy tính, mạch Arduino hay các vi điều khiển khác bằng nhiều phương thức:
Galieo cung cấp giao tiếp UART TTL Serial ở cả 2 mức 3.3V và 5V ở 2 chân 0 (RX) và 1 (TX) Thêm vào đó, 1 cổng UART khác hỗ trợ RS-232 có thể được sử dụng qua jack cắm 3.5mm Bắt đầu mô phỏng thiết bị và cấu hình nó như sau: 115.200 bps, 8 bit dữ liệu, 1 stop bit, không có tính chẵn
lẻ, không kiểm soát dòng chảy Bạn cũng sẽ cần phải cấu hình tên cổng nối tiếp Nếu sử dụng USB để chuyển đổi nối tiếp với Windows mở Device Manager, mở rộng phần Cảng, và lưu ý tên cổng (COM <some_number>) USB của bạn để chuyển đổi nối tiếp được sử dụng Ví dụ để bắt đầu sử dụng GNU màn hình giống như màn hình / dev / ttyS0 115200, / dev / ttyS0 với cổng nối tiếp tên thiết bị thực tế Thông điệp khởi động UEFI, tiếp theo menu GRUB, tiếp theo là thông điệp khởi động Linux Đăng nhập vào hệ thống Linux của Galileo sử dụng gốc như tên người dùng Bằng tài khoản root mặc định không có bất kỳ mật khẩu, nhưng tôi thực sự khuyên bạn nên thiết lập một đặc biệt là nếu bạn sẽ được kết nối Galileo của bạn lên mạng
Cổng USB Client cho phép giao tiếp Serial (CDC-ACM) qua USB Nó cung cấp cho bạn kết nối Serial đến Serial Monitor (một chức năng trong IDE) hoặc các ứng dụng khác trong máy tính của bạn Bạn cũng có thể tải chương trình Arduino lên Galieo qua cổng này
Cổng USB Host cho phép Galieo kết nối tới các thiết bị khác như chuột, bàn phím, điện thoại thông minh, với vai trò là một USB Host
Galieo là mạch Arduino đầu tiên cung cấp một cổng mini PCI Express (mPCIe) Cổng này cho phép kết nối các module mPCIe full-size lẫn half-sized (với adapter) cũng như cung cấp thêm một cổng USB Host khác Một module chuẩn mPCIe có thể kết nối và cung cấp cho Galieonhiều ứng dụng như WiFi, Bluetooth hay kết nối mạng di động Bước đầu, cổng mPCIe sẽ
hỗ trợ thư viện WiFi Xem Intel Galieo Getting Started Guide để biết thêm thông tin
Cổng kết nối Ethernet RJ45 cho phép Galieo kết nối đến các mạng có dây Giap tiếp Ethernetđược hỗ trợ đầy đủ trên Galieo, do đó bạn không cần phải
sử dụng giao tiếp SPI như trên Arduino shield
Trang 31 Đầu đọc thẻ nhớ microSD tích hợp trên mạch có thể được truy cập thông qua thư viện SD Giao tiếp giữa Galieo và thẻ nhớ microSD được hỗ trợ bởi một trình điều khiển SD tích hợp, do đó bạn không cần phải sử dụng giao tiếp SPI như trên mạch Arduino Giao tiếp SD có thể chạy với tần số đến 50Mhz phụ thuộc vào Class của thẻ nhớ Thẻ nhớ có 2 loại Class thông dụng là Class 4 và Class 10
Phần mềm như trên Arduino bao gồm thư viện Wire giúp bạn dễ dàng sử dụng bus I2C/TWI
Với giao tiếp SPI, hãy sử dụng thư viện SPI
2.4.3 Lập trình với Intel Galileo
Những hệ điều hành có thể chạy các công cụ phát triển của Galileo:
Linux: Ubuntu 12.04 (32-bit và 64-bit)
Mac OS X version 10.8.5 Đã kiểm tra trên Mac OS X 10.6.8, 10.7.5, and 10.9 bản Developer Preview
Windows: Windows 7 (32-bit và 64-bit) và Windows 8
Với bộ nhớ flash tích hợp trên mạch, Galileo có một không gian khá hạn chế
để lưu trữ Linux Kernel - phần nhân của hệ điều hành Linux mặc định Do đó, chức năng của hệ điều hành này khá là còi cọc, nói đúng hơn là chỉ đủ để những người mới làm quen với Linux tìm hiểu về nó
Tuy nhiên với thẻ nhớ microSD, bạn có thể cài đặt lên đó một phiên bản Linux mới hơn và mạnh hơn với nhiều công cụ giúp bạn tận dụng được sức mạnh của bộ vi xử lí 400Mhz x86 Intel Pentium SoC trên Galileo Intel cung cấp gói hỗ trợ ,
mà trong số những thứ khác bao gồm mọi thứ cần thiết để xây dựng lại hình ảnh bằng cách sử dụng Linux Yocto Ở đây, ta sẽ sử dụng bản Linux do Intel cung cấp Trong tương lai, khi Intel Galileo phát triển mạnh hơn thì có thể sẽ có thêm nhiều bản khác do người dùng tự tạo nên Đầu tiên, bạn phải cần một cái thẻ nhớ microSD dung lượng tối thiểu 1GB Chú ý rằng Galileo chỉ hỗ trợ thẻ nhớ có dung lượng tới 32GB Truy cập vào trang Software Downloads - Drivers dành cho Galileo, chọn mục "SD-Card Linux Image for Intel Galileo", bạn sẽ tải về phiên bản Linux mới nhất Giải nén bản Linux vừa tải được vào thư mục gốc của thẻ nhớ Nếu mạch Galileo của bạn còn đang chạy, hãy tắt nó đi và tháo dây nguồn ra Cắm thẻ nhớ microSD vừa cài đặt bản mới Linux vào Galileo và gắn dây nguồn trở lại Lần khởi động này
có thể lâu hơn bình thường Sau khi Galileo đã khởi động xong, bạn hãy sử dụng terminal để thử chạy một vài lệnh đơn giản trên Galileo
Một số phần mở rộng có thể kể đến như:
Wifi driver: Galileo hỗ trợ hầu hết các chipset Wifi card của Intel, chỉ cần cài đặt đầy đủ Wifi driver là có thể chạy được hầu hết các card hỗ trợ Wifi Chỉ cần cắm nó vào khe cắm ở mặt dưới của board
Trang 32 Python/PHP: Bạn là người có đủ trình độ để nghiên cứu mạch Intel
Galileo này, do đó cũng không cần giới thiệu gì nhiều về những ngôn ngữ này
Node.js: Là một ngôn ngữ phổ biến dựa trên nền JavaScript Node.js
là một sự kết hợp khá tốt với Python/PHP nếu bạn đã sử dụng
thành tạo JavaScript
SSH (Secure Shell): Là một công cụ cho phép bạn đăng nhập và kiểm soát Galileo từ xa qua terminal của hệ điều hành Linux trên Galileo
Với cách thông thường, bạn phải cần các kết nối vật lí (dùng dây)
thì mới truy cập được tới terminal của Linux trên Galileo
OpenCV: Là viết tắt của từ open-source Computer Vision Đây là một ứng dụng xử lí hình ảnh nguồn mở Nếu bạn có camera và muốn lập trình theo dõi hay tìm kiếm một vật thế nào đó (hay các chức năng tương tự khác) thì bạn sẽ cần tới nó
ALSA (Advanced Linux Sound Architectures): Giúp Galileo có khả năng phát âm thanh cũng như ghi âm với định dạng file MIDI
V4L2 (Video4Linux2): Là một chương trình quay video và phát lại
chạy trên Linux Nếu bạn muốn có một cái webcam, V4L2 sẽ giúp bạn làm việc đó
Và còn nhiều chức năng khác nữa
Tất nhiên Intel cũng cung cấp sửa đổi Arduino IDE hỗ trợ Galileo Sketches đang nhận được biên dịch vào file thực thi Linux thông thường, mà được chạy như là người chủ trên Galileo Một điều hữu ích - nó có thể sử dụng "hệ thống" chức năng trong bản phác thảo để bắt đầu quá trình trên Linux (ví dụ để cấu hình Ethernet sử dụng ifconfig, và khởi chạy trình nền SSH)
Galieo có thể được lập trình với IDE của Arduino Khi đã sẵn sàng để tải chương trình của mình lên, hãy kết nối máy tính của bạn với Galieo qua cổng USB Client (gần cổng Ethernet nhất) trên mạch, trong IDE hãy chọn Boards là "Intel Galieo" Bên cạnh
đó board Galileo cũng có thể giao tiếp UART với máy tính thông dùng cổng kết nối RS-232 bằng một jack 3.5mm với một số chường trình hỗ trợ như: Putty, Tera Term,… Thay vì phải bấm nút reset trên mạch để tải chương trình lên, Galieo được thiết kế
để có thể reset bởi software chạy trên máy tính đang lập trình nó Khi Galieo khởi động,
sẽ có 2 trường hợp xảy ra:
Nếu đã có 1 chương trình trong bộ nhớ, nó sẽ được khởi chạy Trường hợp này chỉ xảy ra khi bạn đã gắn thẻ microSD vào Galileo
Nếu không có chương trình nào trong bộ nhớ, Galieo sẽ đợi lệnh tải
chương trình lên từ IDE Nếu không có thẻ microSD, chương trình của bạn sẽ bị mất khi Galileo khởi động lại (reboot)
Trang 33Khi một chương trình đang chạy trên Galieo, bạn có thể tải một chương trình khác lên mà không cần nhấn nút reset trên mạch: chương trình đang chạy sẽ bị ngừng, Galileo sẽ đợi đến khi chương trình mới được tải lên và khởi chạy nó
2.4.4 Thuộc tính các chân ở chế độ hoạt động
Các chân được đặt chế độ OUTPUT bằng hàm pinMode() sẽ có trạng thái trở kháng thấp TrênGalieo, khi một chân ở chế độ OUTPUT, các hàm chức năng sẽ được cung cấp qua phần mở rộng I2C-based Cypress I/O Các chân Digital từ 0 đến 13 và các chân Analog từ A0 đến A5 có thể được thiết đặt chế độ OUTPUT trên Galieo Các phần mở rộng của những chân I/O, khi được thiết lập chế độ OUTPUT, có thể hoạt động với cường độ dòng điện đến 10mA và có thể đạt đỉnh 25mA Trên tất cả các chân OUTPUT, dòng giới hạn là 80mA và dòng đỉnh là 200mA Bảng sau sẽ cung cấp cho bạn cái nhìn tổng quan về các chân trên Galieo
2.4.5 Thiết đặt các jumper trên Galileo
Có 3 jumper trên Gailieo được sử dụng cho nhiều mục đích khác nhau
2.4.5.1 IOREF jumper
Để Galileo có thể chạy được các shield ở cả 2 mức 3.3V và 5V, điện áp ở các chân giao tiếp bên ngoài được điều chỉnh bởi các jumper Khi jumper nối vào mức 5V, Galileo có thể hoạt động với các shield chạy ở 5V và điện áp ở chân IOREF khi đó sẽ
là 5V Khi jumper nối vào mức 3.3V, Galileo có thể hoạt động với các shield chạy ở 3.3V và điện áp ở chân IOREF khi đó sẽ là 3.3V
Phạm vi điện áp đọc bởi các chân analog cũng được kiểm soát với IOREF jumper
và không được vượt quá điện áp hoạt động Tuy nhiên, hàm analogRead() vẫn giữ độ phân giải 10bit (mặc định, có thể chỉnh lên 12bit) ở mức 5V với 1024 đơn vị hay 0.0049V (4.9mV) mỗi đơn vị bất chấp các cài đặt IOREF jumper của người dùng Cảnh báo, IOREF jumper phải được cài đặt đúng với điện áp sử dụng trên Galileo và shield Các cài đặt không chính xác có thể dẫn tới những hư hại cho Galileo hoặc shield
2.4.5.2 I2C Address Jumper
Để ngăn chặn sự trùng lặp địa chỉ giữa các thiết bị I2C Slave của các I/O Expander trên Galileohay EEPROM với các thiết bị I2C Slave ngoại vi, jumper J2 được sử dụng để thiết đặt nhiều địa chỉ I2C khác nhau cho các thiết bị trên Galileo
Khi J2 kết nối với chân số 1 (đánh dấu bởi hình tam giác màu trắng), 7bit địa chỉ của I/O Expander là 0100001 và 7bit địa chỉ của EEPROM là 1010001
Đổi vị trí của jumpper, 7bit địa chỉ của I/O Expander sẽ là 0100000 còn của EEPROM là1010000
2.4.5.3 VIN jumper
Trên Galileo, chân VIN được sử dụng để cấp nguồn ngoài 5V, nó được nối với jack nguồn cũng như có thể cấp nguồn cho các shield hay thiết bị khác Nếu bạn muốn cấp nguồn cho mạch ở mức điện áp lớn hơn 5V cho các shield lấy nguồn
từ chân VIN, bạn phải tháo VIN jumper ra để ngắt kết nối chân VIN với nguồn 5V
Trang 34trên Galileo Cảnh báo, nếu VIN jumper chưa được tháo ra, và bạn sử dụng một mức điện áp cao hơn 5V ở chân VIN,Galileo có thể bị hư hại hay gặp phải hoạt động bất thường
Hình 2.12 Vị trí các jumper trên board Intel Galileo
2.4.6 Reset tự động (softwave) và đặc điểm vật lí của board Intel Galileo
Thay vì phải bấm nút reset trên mạch trước khi tải chương trình lên, Galileo được thiết kế để có thể reset bởi phần mềm chạy trên máy tính đang kết nối với nó Tín hiệu điều khiển USB CDC-ACMđược sử dụng để chuyển Galileo từ chế độ run-time sang chế độ bootloader Phần mềm Arduino sử dụng khả năng này để cho phép bạn tải chương trình lên chỉ bằng cách nhấn nút Upload trên Arduino IDE
Galileo có chiều dài 10.67cm và rộng 7.11cm với các cổng USB, jack UART, cổng Ethernet vàjack nguồn mở rộng ra ngoài kích thước bo mạch 4 lỗ bắt vít cho phép mạch có thể được gắn lên các bề mặt hoặc hộp đựng Chú ý rằng khoảng cách giữa chân Digital số 7 và số 8 là 4.06mm, trong khi khoảng cách giữa các chân khác là 2.54mm
Trang 35Khối xử lý trung tâm của toàn hệ thống là board Intel Galileo, được gắn thẻ nhớ
SD 8GB có chứa file Galileo Linux Image và các các dữ liệu cần thiết khác nhằm giúp truy xuất được hệ điều hành Linux trên board và thực thi các chương trình xử lý ảnh điều khiển xe
Hình 3.1 Kiến trúc tổng quát của hệ thống