You are on page 1of 79

NHẬN XÉT CỦA NGƯỜI HƯỚNG DẪN

.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
NHẬN XÉT CỦA NGƯỜI PHẢN BIỆN

.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
TÓM TẮT ĐỀ TÀI

Tên đề tài: Ứng dụng IoT điều khiển Robot


Sinh viên thực hiện:
Trương Đình Thành Nguyên MSSV: 105160192 Lớp: 16TDH.
Trần Tuấn Thành MSSV: 105160203 Lớp: 16TDH.

Đề tài “Ứng dụng IoT điều khiển Robot” tập trung vào nghiên cứu , chế tạo bộ xử lí trung
tâm , là đầu não của robot , làm nhiệm vụ xác nhận vật thể và chỉ rõ hành động tiếp theo
cho robot phải thực hiện . Dựa trên nhiều công nghệ hiện đại hiện nay như xử lí ảnh ,
mạng truyền thông để xây dựng nên hệ thống hoàn chỉnh Mọi kết quả từ hình ảnh , giám
sát vật thể , nhiệt độ , hành động , đều được theo dõi thông qua giao diện giám sát đã
được thiết kế ra. Mỗi một chương trong đề tài sẽ đi từ vấn đề khái quát đến cụ thể , nêu rõ
phương án giải quyết . Toàn bộ nội dung được tóm gọn lại thành các chương sau :
CHƯƠNG 1: TỔNG QUAN ĐỀ TÀI
CHƯƠNG 2 : TỔNG QUAN VỀ THIẾT BỊ , CÔNG NGHỆ DÙNG TRONG DỰ
ÁN
CHƯƠNG 3: XÂY DỰNG THIẾT KẾ HỆ THỐNG ĐIỀU KHIỂN GIÁM SÁT
CHƯƠNG 4: HOÀN THIỆN HỆ THỐNG
ĐẠI HỌC ĐÀ NẴNG CỘNG HÒA XÃ HÔI CHỦ NGHĨA VỆT NAM
TRƯỜNG ĐẠI HỌC BÁCH KHOA Độc lập - Tự do - Hạnh phúc
KHOA : ĐIỆN

NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP


TT Họ tên sinh viên Số thẻ SV Lớp Ngành
Kỹ thuật Điều khiển và
1 Trương Đình Thành Nguyên 105160192 16TDH
Tự động hóa
Kỹ thuật Điều khiển và
2 Trần Tuấn Thành 105160203 16TDH
Tự động hóa
1. Tên đề tài đồ án: Ứng dụng IOT điều khiển robot
2. Đề tài thuộc diện: ☐Có ký kết thỏa thuận sở hữu trí tuệ đối với kết quả thực hiện
3. Các số liệu và dữ liệu ban đầu:
……………………………………..……………………………………………….
4. Nội dung các phần thuyết minh và tính toán:
a. Phần chung:
STT Họ tên sinh viên Nội dung

1 Trương Đình Thành Nguyên  Nghiên cứu tổng quát về công nghệ ứng
dụng trong đề tài
2 Trần Tuấn Thành  Nghiên cứu , tiến hành việc lắp ráp mạch

b. Phần riêng:
STT Họ tên sinh viên Nội dung

1 Trương Đình Thành Nguyên  Xây dựng giao diện giám sát , xây dựng
thuật toán
2 Trần Tuấn Thành  Lắp ráp mạch và hoàn thiện phần cứng
5. Họ tên người hướng dẫn: Phần/ Nội dung:
Thiết kế điều khiển và giám sát robot
chuyển động từ xa
Nội dung bao gồm
- Các tham số cần giám sát
- Cảm biến đo khoảng cách
- Cảm biến đo nhiệt độ
- Camera
- Xử lý ảnh
- Máy tính nhúng Raspberry
TS.Nguyễn Hoàng Mai - Ngôn ngữ python
- Lập trình trên máy tính nhúng
- Truyền thông internet
- Truyền thông mạng 3G, 4G
- Thiết kế mạng cảm biến
- Thiết kế phần nguồn
- Thiết kế chương trình giám sát
trên máy tính
- Lắp ráp mạch

6. Ngày giao nhiệm vụ đồ án: 24/08/2020


7. Ngày hoàn thành đồ án: ……/……/2020

Đà Nẵng, ngày tháng năm 2020


Trưởng Bộ môn Tự động hóa Người hướng dẫn

TS. Giáp Quang Huy TS.Nguyễn Hoàng Mai


LỜI NÓI ĐẦU

Hiện nay trong quá trình công nghiệp hóa và hiện đại hóa đất nước, Nhà nước ta đã
và đang khuyến khích việc áp dụng các thành tựu khoa học kỹ thuật vào trong sản xuất
nhằm nâng cao chất lượng cũng như số lượng hàng hóa, đem lại hiệu quả kinh tế góp
phần thúc đẩy sự phát triển của xã hội, nâng cao chất lượng cuộc sống người dân.
Với những định hướng rõ ràng đó, nhiều thành tựu khoa học đã được áp dụng vào
tất cả các lĩnh vực, các ngành sản xuất. Ngành nông nghiệp cũng không nằm ngoài xu
hướng đó nhất là trong bối cảnh nước ta đã tham gia vào hiệp định tự do của kinh tế thế
giới. Bởi vì lẽ đó, nếu không nhanh chóng áp dụng các tiến bộ khoa học kỹ thuật, không
đổi mới phương thức sản xuất và canh tác truyền thống thì ngành nông nghiệp sẽ tụt hậu
so với thế giới và khu vực. Trước yêu cầu cấp thiết đó ngành nông nghiệp cùng với ngành
tự động hóa đã đưa ra rất nhiều giải pháp trong nông nghiệp và đã được ứng dụng rộng rãi
trên cả nước.
Trong đề tài đồ án tốt nghiệp “Ứng dụng IOT điều khiển robot” chúng em xin được
giới thiệu giải pháp ứng dụng công nghệ xử lí ảnh và công nghệ mạng dùng để giám sát
việc sửa chữa của robot trên đường dây nhằm mục đích tối ưu hóa khả năng giám sát,
đảm bảo an toàn hơn , giảm sức người nhằm mục đích nâng cao chất lượng truyền tải điện

LỜI CẢM ƠN
Sau một thời gian nghiên cứu, tìm hiểu và tính toán dưới sự chỉ dẫn tận tình của thầy
TS.Nguyễn Hoàng Mai và anh Nguyễn Phan Xuân Bảo chúng em đã hoàn thành đề tài:
“Ứng dụng IoT trong điều khiển robot”.

i
CAM ĐOAN

Tôi xin cam đoan trong quá trình làm đồ án tốt nghiệp sẽ thực hiện nghiêm túc các
quy định về liêm chính học thuật, Không gian lận, bịa đặt, đạo văn, giúp người học khác
vi phạm. Trung thực trong việc trình bày, thể hiện các hoạt động học thuật và kết quả từ
hoạt động học thuật của bản thân. Không giả mạo hồ sơ học thuật. Không dùng các biện
pháp bất hợp pháp hoặc trái quy định để tạo nên ưu thế cho bản thân. Chủ động tìm hiểu
và tránh các hành vi vi phạm liêm chính học thuật, chủ động tìm hiểu và nghiêm túc thực
hiện các quy định về luật sở hữu trí tuệ. Sử dụng sản phẩm học thuật của người khác phải
có trích dẫn nguồn gốc rõ ràng. Tôi xin cam đoan số liệu và kết quả nghiên cứu trong đồ
án này là trung thực và chưa được sử dụng để bảo vệ một học vị nào. Mọi sự giúp đỡ cho
việc thực hiện đồ án này đã được cảm ơn và các thông tin trích dẫn đã được chỉ rõ nguồn
gốc rõ ràng và được phép công bố.

Đà Nẵng, ngày tháng 12 năm 2020.


Sinh viên thực hiện
(ký tên)

Trương Đình Thành Nguyên


Trần Tuấn Thành

ii
MỤC LỤC

TÓM TĂT
NHIỆM VỤ ĐỒ ÁN
LỜI NÓI ĐẦU VÀ CẢM ƠN i
LỜI CAM ĐOAN LIÊM CHÍNH HỌC THUẬT ii
MỤC LỤC iii
DANH SÁCH CÁC BẢNG BIỂU, HÌNH VẼ VÀ SƠ ĐỒ v
CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI........................................................................1
1.1. Đặt vấn đề.................................................................................................................... 1
1.1.1. Giới thiệu về đường dây 500kV................................................................................1
1.1.2. Một số thiết bị trên đường dây 500kV......................................................................3
1.2. Tổng quan về Robot.....................................................................................................5
1.2.1. Khái niệm..................................................................................................................5
1.2.2. Vai trò và lợi ích.......................................................................................................5
1.2.3. Ứng dụng.................................................................................................................. 6
1.3. Lựa chọn đề tài..........................................................................................................10
1.4. Tóm tắt quá trình triển khai đề tài..............................................................................11
1.4.1. Lập kế hoạch, sắp xếp công việc:............................................................................11
1.4.2. Tìm hiểu lý thuyết liên quan đến đồ án...................................................................11
1.4.3. Tìm hiểu Web Server..............................................................................................11
1.4.4. Lập trình xử lý ảnh..................................................................................................11
1.4.5. Xây dựng Web hiển thị, giám sát, cảnh báo............................................................11
1.4.6. Kiểm tra, chạy thử...................................................................................................11
1.4.7. Hoàn thiện đồ án.....................................................................................................11
CHƯƠNG 2: TỔNG QUAN VỀ THIẾT BỊ , CÔNG NGHỆ DÙNG TRONG DỰ
ÁN.................................................................................................................................... 12
2.1. TỔNG QUAN VỀ CÔNG NGHÊ:............................................................................12
2.1.1. Phần mềm xử lí ảnh :..............................................................................................12
2.1.2. Ngôn ngữ lập trình Python......................................................................................15
2.1.3. web frameworks Flask :..........................................................................................16

v
2.1.4. Ngôn ngữ lập trình web HTML..............................................................................17
2.1.5. CSS (Cascading Style Sheet):.................................................................................18
2.1.6. Jquery là gì :............................................................................................................19
2.1.7. SocketIo..................................................................................................................21
2.1.8. Đa luồng (Multithreading)......................................................................................22
2.2. Tổng quan về thiết bị sử dụng :..................................................................................22
2.2.1. Giới thiệu chung về Adruino Uno R3.....................................................................22
2.2.2. . Máy tính nhúng Raspberry....................................................................................23
2.2.3. USB Camera...........................................................................................................24
2.2.4. Cảm biến nhiệt độ:..................................................................................................25
2.2.5. Cảm biến hồng ngoại :............................................................................................26
2.2.6. Khối nguồn.............................................................................................................27
CHƯƠNG 3: XÂY DỰNG THIẾT KẾ HỆ THỐNG ĐIỀU KHIẾN GIÁM SÁT.....28
3.1. Xây dựng chương trình xử lý hình ảnh :....................................................................28
3.1.1. Các thuật toán giúp tìm ra Feature (biểu diễn bởi keypoint descriptor)..................30
3.1.2. Thuật toán giúp Matching Feautre:.........................................................................32
3.2. Xây dựng giao diện giám sát......................................................................................36
3.3. Xây dựng chương trình mô phỏng việc điều khiển Robot :........................................43
3.3.1. Giới thiệu sơ bộ về UART :....................................................................................43
3.3.2. Lập trình truyền thông nối tiếp giữa Raspberry và Arduino:...................................45
CHƯƠNG 4: HOÀN THIỆN HỆ THỐNG...................................................................48
4.1. Kết quả:...................................................................................................................... 48
4.2. Nhận xét :...................................................................................................................50
KẾT LUẬN..................................................................................................................... 51
TÀI LIỆU THAM KHẢO..............................................................................................51
PHỤ LỤC A....................................................................................................................53
PHỤ LỤC B..................................................................................................................... 59
PHỤ LỤC C....................................................................................................................65
DANH SÁCH CÁC BẢNG, HÌNH VẼ

CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI........................................................................1


Hình 1.1 : Công nhân đang sửa chữa đường dây................................................................2
Hình 1.2 : Flycam phun lửa đốt diều mắc trên dây.............................................................3
Hình 1.3: Khung định vị trên đường dây 3 pha...................................................................3
Hình 1.4 : Hình ảnh khung định vị thực tế..........................................................................4
Hình 1.5: Chuối sứ néo.......................................................................................................4
Hình 1.6: Chuỗi sứ đứng thực tế.........................................................................................5
Hình 1.7: Robot trong ngành sản xuất ô tô.........................................................................6
Hình 1.8: Robot Vegebot thu hoạch rau.............................................................................7
Hình 1.9: ứng dụng hệ thống robot Modus V Synaptive vào phẫu thuật chuyên khoa
Ngoại thần kinh tại bệnh viện 115......................................................................................8
Hình 1.10 : Robot Perserverance vừa được NASA đưa lên sao hỏa...................................9
Hình 1.11 : Robot chó Vision được áp dụng vào quân đội Mỹ...........................................9
CHƯƠNG 2: TỔNG QUAN VỀ THIẾT BỊ , CÔNG NGHỆ DÙNG TRONG DỰ
ÁN.................................................................................................................................... 12
Hình 2.1: Các quá trình xử lý............................................................................................12
Hình 2.2 : Phần mềm Opencv...........................................................................................15
Hình 2.3 :Ngôn ngữ lập trình Python................................................................................15
Hình 2.4 : Micro-framework Flask...................................................................................16
Hình 2.5 : Các thành phần của HTML..............................................................................18
Hình 2.6 : Ngôn ngữ lập trình CSS...................................................................................19
Hình 2.7 : Tác động của jQuery........................................................................................20
Hình 2.8 :Mô hình SocketIO.............................................................................................21
Hình 2.9 : Adruino Uno R3..............................................................................................22
Hình 2.10 :Module máy tính nhúng Raspberry Pi 3B+.....................................................23
Hình 2.11: Camera HD C270 Logitech.............................................................................24
Hình 2.12: Cảm biến nhiệt độ LM35................................................................................25
Hình 2.13 : Cảm biến hồng ngoại.....................................................................................26
Hình 2.14: Sạc dự phòng cấp nguồn cho kit raspberry Pi.................................................27
CHƯƠNG 3: XÂY DỰNG THIẾT KẾ HỆ THỐNG ĐIỀU KHIẾN GIÁM SÁT.....28
Hình 3.1 :Minh họa các Feature trong một khung hình.....................................................28
Hình 3.2 :Lưu đồ thuật toán cho việc xác định vật thể......................................................29
Hình 3.3 : Giả thuyết của FAST detector..........................................................................30
Hình 3.4: Ví dụ về FAST descriptor................................................................................30
Hình 3.5.: Kim tự tháp chứa các bức ảnh đã được resize..................................................31
Hình 3.5 : Mô hình truyền thông nối tiếp UART..............................................................43
Hình 3.6 : Cấu trúc của việc truyền dữ liệu.......................................................................44
CHƯƠNG 4: HOÀN THIỆN HỆ THỐNG...................................................................49
Hình 4.1: Nhận diện Khung định vị..................................................................................49
Hình 4.2 : Nhận diện Chuỗi sứ néo...................................................................................49
Hình 4.3 : Nhận diện Chuỗi sứ đứng nếu robot cách xa chuỗi đứng.................................50
Hình 4.4 : Nhận diện Chuỗi sứ đứng nếu robot đứng gần chuỗi đứng..............................50

vi
LỜI MỞ ĐẦU

Ngày nay với sự phát triển vượt bậc của các ngành khoa học kỹ thuật nói chung
và ngành Kỹ thuật điều khiển và tự động hóa nói riêng, cuộc sống của con người đã
chuyển sang một thời đại mới – thời đại công nghệ hóa. Với việc ứng dụng khoa học
công nghệ vào đời sống xã hội, đời sống con người đang dần được cải thiện và nâng
cao một cách đáng kể. Tuy nhiên việc quản lý giám sát và vận hành các đường dây
500kV theo kiểu truyền thống gây ra nhiều khó khăn, lãng phí nhân lực, thời gian và
tiền bạc.
Xuất phát từ những vấn đề thực tiễn như trên, chúng em đã chọn thực hiện đề
tài:”Ứng dụng IoT điều khiển Robot” vừa đáp ứng được nhu cầu khả năng thu thập và
xử lý thông tinh rất lớn, có mức độ chính xác cao , kịp thời . Giúp việc điều khiển và
giám sát trở nên dễ dàng , tiết kiệm được thời gian và nhân lực.
Ứng dụng IoT điều khiển Robot

CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI

1.1. Đặt vấn đề


1.1.1. Giới thiệu về đường dây 500kV
- Đường dây 500kV Bắc – Nam mạch 1 là công trình đường dây truyền tải điện năng
(điện xoay chiều) siêu cao áp 500kV đầu tiên tại Việt Nam có tổng chiều dài 1.487 km,
kéo dài từ Hòa Bình đến Thành phố Hồ Chí Minh. Mục tiêu xây dựng công trình là nhằm
truyền tải lượng điện năng dư thừa từ Miền Bắc Việt Nam (từ cụm các nhà máy thủy điện
Hòa Bình, Thác Bà; nhiệt điện Phả Lại, Uông Bí, Ninh Bình) để cung cấp cho miền Nam
Việt Nam và miền Trung Việt Nam lúc đó đang thiếu điện nghiêm trọng, đồng thời liên
kết hệ thống điện cục bộ của ba Miền thành một khối thống nhất.
- Đường dây 500kV Bắc – Nam có tổng chiều dài 1487 km gồm có 3437 cột điện tháp
sắt đi qua 14 tỉnh thành gồm Hòa Bình, Thanh Hoá, Nghệ An, Hà Tĩnh, Quảng Bình,
Quảng Trị, Thừa Thiên - Huế, Quảng Nam - Đà Nẵng (nay là tỉnh Quảng Nam và thành
phố Đà Nẵng), Kon Tum, Gia Lai, Đắc Lắc, Sông Bé (nay là các tỉnh Bình Phước, Bình
Dương), thành phố Hồ Chí Minh; trong đó qua vùng đồng bằng là 297 km (chiếm 20%),
trung du – cao nguyên là 669 km (chiếm 45%), núi cao, rừng rậm là 521 km (chiếm 35%)
với 8 lần vượt sông (sông Đà, sông Mã, sông Lam, sông La, sông Gianh, sông Thạch
Hãn, sông Hương, sông Sài Gòn) và 17 lần vượt quốc lộ.
- Không chỉ truyền tải điện từ Bắc vào Nam, kể từ khi một số nhà máy điện lớn ở miền
Nam đi vào hoạt động, nguồn điện tại chỗ đã được đáp ứng, giai đoạn từ năm 1995-2005,
đường dây 500kV Bắc - Nam lại thêm một lần nữa chứng minh tính hiệu quả của nó - khi
thực hiện nhiệm vụ truyền tải ngược một lượng điện năng lớn ra hỗ trợ cho miền Bắc, đặc
biệt vào các thời điểm khô kiệt, hạn hán. `

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 1


Ứng dụng IoT điều khiển Robot

Hình 1.1 : Công nhân đang sửa chữa đường dây


- Với những lợi thế của công trình điện 500kV Bắc Nam đối với an ninh năng lượng của
hệ thống điện quốc gia, từ năm 2000, nhiều đoạn tuyến của đường dây 500kV mạch 2
được thi công xây dựng. Kể từ khi đi vào hoạt động năm 2005, đường dây 500kV mạch 2
(dài gần 1.200km) đã đồng thời giúp nâng gấp 2 lần năng lực truyền tải điện, góp phần
đảm bảo độ tin cậy cho hệ thống điện quốc gia.
=> Việc đảm bảo sự truyền tải điện liên tục trên đường dây là cực kì quan trọng . Do đó
công tác bảo trì bảo dưỡng phải được chú trọng hằng đầu . Xét đến vấn đề về hiệu quả ,
hiệu suất , và chi phí mỗi lần bảo trì bảo dưỡng , đảm bảo an toàn , cũng như dần dần
chuyển hóa hệ thống sang tự động hoàn toàn , việc đưa robot vào hệ thống trở nên thực
sực cần thiết. Trên thực tế đã có nhiều robot được nghiên cứu, phát minh được ứng dụng
rộng rãi như :

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 2


Ứng dụng IoT điều khiển Robot

- Áp dụng flycam để kiểm tra tình trạng nối, mối vá, chuỗi cách điện, các chi trên đường
dây mang điện vận hành. Trên cơ sở hình ảnh thu thập được từ phim quay, ảnh chụp của

flycam, các kỹ sư vận hành đường dây sẽ đánh giá, phân tích tình trạng thiết bị để lên kế
hoạch sửa chữa, bảo dưỡng kịp thời.
Hình 1.2 : Flycam phun lửa đốt diều mắc trên dây
1.1.2. Một số thiết bị trên đường dây 500kV
- Khung định vị: Khung định vị giữ cho khoảng cách giữa các dây trong một pha
cách nhau một khoảng gần như cố định trong suốt khoảng cột, dưới tác động của
nhiệt độ (dây dãn ra), của gió (dây chao lệch không đều), như vậy đường kính
tương đương của dây dẫn ở mọi điểm dọc tuyến ít thay đổi), giảm rung.

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 3


Ứng dụng IoT điều khiển Robot

Hình 1.3: Khung định vị trên đường dây 3 pha

Hình 1.4 : Hình ảnh khung định vị thực tế


- Chuỗi sứ néo, chuỗi sứ đứng: Cách điện giữa đường dây với phần không mang
điện như xà, cột... Làm điểm định vị và giữ, néo dây dẫn.

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 4


Ứng dụng IoT điều khiển Robot

Hình 1.5: Chuối sứ néo

Hình 1.6: Chuỗi sứ đứng thực tế


1.2. Tổng quan về Robot
1.2.1. Khái niệm

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 5


Ứng dụng IoT điều khiển Robot

- Robot là một loại máy móc có thể thực hiện những công việc một cách tự động thông
qua sự điều khiển của máy tính hoặc các vi mạch điện tử được lập trình. Robot là một tác
nhân cơ khí nhân tạo, ảo, thường là một hệ thống cơ khí-điện tử
1.2.2. Vai trò và lợi ích
- Cùng với sự tiến bộ của công nghệ thông tin, robot ngày càng trở nên thông minh hơn.
Chúng đóng vai trò ngày càng quan trọng trong sản xuất thông minh, hệ thống vận
chuyển thông minh, internet vạn vật, dịch vụ thông minh và sức khỏe y tế. Trong thời
gian tới, robot thông minh sẽ tiếp tục được tích hợp mở rộng nhiều công nghệ tiên tiến
nhất như: cộng tác người - robot, truyền động tích hợp thông minh, nhận biết cảm xúc,
giao diện máy tính - bộ não, mạng dữ liệu lớn, phần mềm sinh học và nền tảng đám mây..
- Những lợi ích của Robot trong cuộc sống và sản xuất:
 Giảm đáng kể các chi phí vận hành trực tiếp như chi phí đào tạo, an toàn, quản lý
nhân công, giảm chi phí thuê lao động chân tay.
 Ứng dụng các loại cách tanh robot công nghiệp giúp nâng cao độ chính xác, chất
lượng và đảm bảo tính ổn định của sản phẩm.
 Giải phóng con người khỏi những điều kiện làm việc khắc nghiệt, nguy hiểm, độc
hại.
 Các loại robot cho phép làm việc ổn định, bền bỉ, liên tục trong khoảng thời gian
dài, giúp nâng cao sản lượng, …
 Sử dụng các sản phẩm trí tuệ nhân tạo AI tăng tính linh hoạt trong sản xuất
 Hạn chế tối đa việc lãng phí nhiên liệu giúp tăng lợi nhuận đáng kể
1.2.3. Ứng dụng
- Với những lợi ích to lớn, thiết thực, robot được ứng dụng rộng rãi trong hầu hết các
ngành nghê, lĩnh vực trong cuộc sản xuất và đời sống:
 Ứng dụng Robot trong sản xuất công nghiệp:
 Robot sử dụng cho đóng gói, phân loại sản phẩm, thường sẽ dùng Robot song
song.
 Robot được dùng để phun sơn trong xưởng sản xuất vỏ ô tô, máy bay….
 Robot công nghiệp dùng trong công nghệ ép nhựa.
 Được ứng dụng cho việc xếp dỡ, gắp hàng hóa.
 Sử dụng trong vận chuyển, di dời sản phẩm.
 Robot hàn xì tự động.

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 6


Ứng dụng IoT điều khiển Robot

 Robot được ứng dụng trong nghành công nghiệp đúc để rót kim loại nóng chảy.

Hình 1.7: Robot trong ngành sản xuất ô tô

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 7


Ứng dụng IoT điều khiển Robot

 Ứng dụng Robot trong sản xuất nông nghiệp:


 Nông nghiệp chính xác: được sử dụng trong các trang trại nhỏ hoặc vườn cây ăn
quản để theo dõi tự động dinh dưỡng của đất, hoạt động quang hợp, chỉ số diện
tích lá và các yếu tố sinh học khác.
 Giám sát ô nhiễm: một số robot được trang bị để theo dõi ô nhiễm do nông
nghiệp tạo ra ở mặt đất.
 Chăn nuôi gia súc: các robot này được sử dụng để chăn gia súc trên các trang
trại lớn, đảm bảo có đủ diện tích để chăn thả, đảm bảo gia súc thể khỏe mạnh.
 Kiểm soát cỏ dại: robot phát hiện và tiếp cận cỏ dại trong trang trại, phun các
loại thuốc diệt cỏ với lượng thích hợp để loại bỏ cỏ dại giảm thiểu tiếp xúc của
người nông dân với thuốc diệt cỏ’
 Tự động hóa vườn ươm: robot có thể được sử dụng trong các vườn ươm cây
trồng, chủ yếu để di chuyển trong các nhà kính lớn.
 Thu hoạch cây trồng: giúp tiết kiệm lượng nhân công đáng kể.
 Trồng và gieo hạt chính xác: giúp tăng trưởng tối ưu, chủ yếu cho vườn rau
 Nhận dạng và thu hoạch trái cây: đây là một trong những ứng dụng phổ biến
nhất của Robot nông nghiệp do tính chính xác và tốc độ cao mà robot có thể đạt
được để tăng sản lượng trái cây đủ tiêu chuẩn để thu hoạch.

Hình 1.8: Robot Vegebot thu hoạch rau

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 8


Ứng dụng IoT điều khiển Robot

 Ứng dụng Robot trong ngành y tế


Các ứng dụng của robot và tự động hóa trong lĩnh vực chăm sóc sức khỏe ngày
càng tăng với nhiều tính năng ưu việt. Robot không chỉ giúp các bác sĩ và nhân
viên u tế thực hiện các nhiệm vụ phức tạp và chính xác mà còn làm giảm khối
lương công việc của họ, nâng cao hiệu quả. Có nhiều loại hình robot khác nhau
được ứng dụng trong ngành y tế:
- Robot lễ tân
- Robot điều dưỡng, tư vấn sức khỏe
- Robot cứu thương
- Robot phục vụ trong bệnh viện
- Robot phun xịt khử khuẩn
- Robot hỗ trợ phẫu thuật, chẩn đoán hình ảnh
- Robot phục hồi chức năng…

Hình 1.9: ứng dụng hệ thống robot Modus V Synaptive vào phẫu thuật chuyên
khoa Ngoại thần kinh tại bệnh viện 115

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 9


Ứng dụng IoT điều khiển Robot

 Ứng dụng robot trong ngành thám hiểm vũ trụ


 Với môi trường khắc nghiệt ở các hành tinh khác, việc ứng dụng robot thông
minh thăm dò ngoài trái đất mang lại nhiều giá trị to lớn. Ngày nay các quốc gia
hàng đầu trong ngành hàng không vũ trụ đang đẩy mạnh nghiên cứu để cho ra
những con robot tối tân nhất, giúp con người khám phá những hành tinh xung

quanh.

Hình 1.10 : Robot Perserverance vừa được NASA đưa lên sao hỏa

 Ứng dụng robot trong quân sự, quốc phòng


 Bên cạnh việc chạy đua vũ trang, việc nghiên cứu, phát minh ra những con
robot phục vụ cho an ninh quốc phòng đang được đẩy mạnh với nhiều ứng
dụng khác nhau:
- Robot dò mìn
- Robot chiến đấu tự hànhRobot tuần tra …

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 10


Ứng dụng IoT điều khiển Robot

`
Hình 1.11 : Robot chó Vision được áp dụng vào quân đội Mỹ
- Ngoài ra robot còn được ứng dụng rộng rãi trong nhiều lĩnh vực khác: thể thao, giải trí,
tìm kiếm cứu nạn, học đường, …
1.3. Lựa chọn đề tài
- Với những ưu điểm đáng nổi trội như trên thì việc lựa chọn robot trong quá trình giám
sát đường dây tải điện 500kV là một lựa chọn vô cùng sáng suốt . Ngoài việc khả năng
giám sát được tăng lên , chi phí nhân công giảm bớt , thì vấn đề an toàn cũng được đảm
bảo hơn.
- Đóng vai trò là trái tim cho mỗi kết cấu robot , đó chính là bộ xử lí trung tâm , nó
chính là phép màu giúp cho robot có thể thực hiện được những công việc phi thường Với
hàng triệu phép tính toán được thực hiện mỗi giây , bộ xử lí sẽ ra lệnh cho các kết cấu cơ
khí của robot làm việc theo đúng như những gì đã được lập trình với độ chính xác cao , độ
trễ thấp .Đặc biệt là trong thời kì 4.0 này , công nghệ AI ngày càng phát triển , có thể giúp
Robot tự đưa ra quyết định , tự học hỏi y hệt một con người bình thường . Những điều
trên có được đều do bộ xử lí trung tâm của mỗi con robot tạo nên
- Chính vì vậy nhóm chung em đã quyêt định chọn đề tài “Ứng dụng IoT cho Robot” ,
bằng cách xây dựng một bộ xử lí trung tâm , với nhiệm vụ nhận biết , giám sát trên đường
dây tải điện 500kV . Từ những thiết kế ban đầu về Robot gồm 4 cánh tay có khả năng di
chuyển bằng cách bước trên đường dây 500 kV Từ đó đặt ra những yêu cầu cơ bản cần
có cho bộ xử lý trung tâm là :

 Có thể nhận biết được vật thể trên đường dây, xử lý và đưa ra lệnh điều khiển động
cơ của robot:
 Chạy trên dây bình thường
 Chạy qua khung định vị
 Chạy gặp chuỗi sứ đứng thì xác định vị trí để đưa ra lệnh lùi bước hoặc vươn
bước qua
 Dùng lại khi gặp chuỗi sứ néo
 Có hệ thống có thể theo dõi , giám sát được
- Dựa trên những yêu cầu cơ bản kể trên , nhóm chúng em đã quyết định chọn một số
công nghệ tiên tiến để áp dụng vào cho dự án của mình :

 Nhận biết các vật thể : phần mềm OpenCV

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 11


Ứng dụng IoT điều khiển Robot

 Hệ thống giám sát : xây dựng bằng cách tạo ra Server giao diện HTML
- Để có thể thực hiện được những công việc trên , thì cần phải có một vài thiết bị đủ khả
năng để đảm nhiệm , cụ thể :
 Raspberry : cho việc tạo ra Server và xử lí hình ảnh
 Arduino : cho việc đọc các module Analog
- Và còn một vài thiết bị cũng như công nghê chưa kể ra , toàn bộ sẽ được giới thiệu kĩ
càng và chuyên sâu ở Chương 2
1.4. Tóm tắt quá trình triển khai đề tài
- Quá trình triển khai đề tài được chia thành 6 giai đoạn chính:
1.4.1. Lập kế hoạch, sắp xếp công việc:
- Tìm hiểu tổng quan để tài, phân chia công việc và thời giabn
- Thống kê linh kiện, thiết bị cần mua
1.4.2. Tìm hiểu lý thuyết liên quan đến đồ án
- Đường dây 500 kV
- Robot
1.4.3. Tìm hiểu Web Server
- Ngôn ngữ nhúng
1.4.4. Lập trình xử lý ảnh
- Dùng ngôn ngữ lập trình Python
1.4.5. Xây dựng Web hiển thị, giám sát, cảnh báo
- Xây dựng phần mềm điều khiển robot
1.4.6. Kiểm tra, chạy thử
- Chạy thử và hiệu chỉnh những lỗi, thiếu sót
1.4.7. Hoàn thiện đồ án
- Trình bày báo cáo đồ án, slide thuyết trình

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 12


Ứng dụng IoT điều khiển Robot

CHƯƠNG 2: TỔNG QUAN VỀ THIẾT BỊ , CÔNG NGHỆ


DÙNG TRONG DỰ ÁN

2.1. TỔNG QUAN VỀ CÔNG NGHÊ:


2.1.1. Phần mềm xử lí ảnh :
 Tổng quan về xử lý ảnh
- Xử lý ảnh là một phân ngành trong xử lý số tín hiệu với tín hiệu xử lý là ảnh. Đây là
một phân ngành khoa học mới rất phát triển trong những năm gần đây. Xử lý ảnh gồm 4
lĩnh vực chính: xử lý nâng cao chất lượng ảnh, nhận dạng ảnh, nén ảnh và truy vấn ảnh.
Sự phát triển của xử lý ảnh đem lại rất nhiều lợi ích cho cuộc sống của con người.
- Ngày nay xử lý ảnh đã được áp dụng rất rộng rãi trong đời sống như: photoshop, nén
ảnh, nén video, nhận dạng biển số xe, nhận dạng khuôn mặt, nhận dạng chữ viết, xử lý
ảnh thiên văn, ảnh y tế, ...
- Các bước xử lý ảnh

Hình 2.1: Các quá trình xử lý


- Sơ đồ này gồm các phần sau:
 Phần thu nhận ảnh (Image Acquisition)
+ Ảnh được thu nhận qua các thiết bị camera, sensor, máy scanner, … Ảnh tạo ra
có dạng hai chiều. Chất lương một ảnh thu nhận được phụ thuộc vào thiết bị thu, vào
môi trường (ánh sang, phong cách).
 Tiền xử lý (Image Processing)
+ Sau bộ thu nhận, ảnh có thể nhiễu độ tương phản thấp nên cần đưa vào bộ tiền
xử lý để nâng cao chất lượng. Chức năng chính của bộ tiền xử lý là lọc nhiễu, nâng độ
tương phản để làm ảnh rõ hơn, nét hơn.

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 13


Ứng dụng IoT điều khiển Robot

 Phân đoạn (Segmentation) hay phân vùng ảnh


+ Phân vùng ảnh là tách một ảnh đầu vào thành các vừng thành phần để biểu diễn
phân tích, nhận dạng ảnh. Ví dụ: để nhân dạng chữ (hoặc mã vạch) trên phòng bì thư
cho mục đích phân loại bưu phẩm, cần chia các câu, chữ về địa chỉ hoặc tên người
thành các từ, các chữ, các số (Hoặc các vạch) riêng biệt để nhận dạng. Đây chính là
phần phức tạp khó khan nhất trong xử lý ảnh và cũng dễ gây lỗi, làm mất độ chính
xác của ảnh. Kết quả nhận dạng ảnh phụ thuộc rất nhiều vào công đoạn này.
 Biều diễn ảnh (Image Representation)
+ Đầu ra ảnh sau phân đoạn chứa các điểm ảnh của vùng ảnh (ả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 lựa chọn các tính chất
để thể hiện ảnh gọi là trích chọn đặc trưng (Feature Selection) gắn với việc tách các
đặc tính cửa ảnh dưới dạng các thông tin định lượng hoặc làm cơ sở để phân biệt lớp
đối tượng này với đối tượng khác trong phạm vi ảnh nhận được. Ví dụ: trong nhận
dạng ý tự trên phong bì thư, chúng ta miêu tả các đặc trưng của từng ký tự giúp phân
biệt ký tự này với ký tự khác.
 Nhận dạng và nội suy ảnh (Image Recognigtion 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 học (hoặ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. Ví dụ: một loạt chứ số và nét gạch ngang trên
phong bì thư có thể được nội suy thành mã điện thoại. Có nhiều cách phân loại ảnh
khác nhau về ảnh. Theo lý thuyết về nhận dạng, các mô hình toán học về ảnh được
phân theo hai loại nhận dạng ảnh cơ bản:
- Nhận dạng theo tham số
- Nhận dạng theo cấu trúc
+ Một số đối tương nhận dạng khá phổ biến hiện nay đạng được áp dụng trong
khoa học và công nghệ là: nhận dạng ký tự (chữ in, chữ viết tay, chư ký điện tử), nhận
dạng văn bản (Text), nhận dạng vân tay, nhận dạng mã vạch, nhận dạng mặt người…
 Cơ sở tri thức (Knowledge Base)
+ Như đã nói ở trên, ảnh là một đối tượng khá phức tạp về đường nét, độ sang tối,
dung lượng điểm ảnh, môi tường để thu ảnh phong phú, kéo theo nhiễu. Trong nhiều
khâu xử lý và phân tích ảnh ngoài việc đơn giản hóa các phương pháp toán học đảm
bảo tiện lợi cho xử lý, người ta mong muốn bắt chước quy trình tiếp nhận và xử lý
ảnh theo cách của con người. Trong các bước xử lý đó, nhiều khâu hiện nay dã xử lý
theo các phương pháp trí tuệ con người.
 Mô tả (Description)
+ Ảnh sau khi số hóa sẽ được lưu vào bộ nhớ, hoặc chuyển sang các khâu tiếp
theo để phân tích. Nếu lưu trữ ảnh trực tiếp từ các ảnh thô, đòi hỏi dung lượng bộ
nhớ cực lớn và không hiệu quả theo quan điểm ứng dụng và công nghệ. Thông

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 14


Ứng dụng IoT điều khiển Robot

thường các ảnh thô đó được đặc tả (biểu diễn) lại (hay đơn giản là mã hóa) theo các
đặc điểm của ảnh được gọi là các đặc trưng ảnh (Image Features).
 Những vấn đề cơ bản trong hệ thống xử lý ảnh
- Điểm ảnh (Picture Element)
+ Gốc của ảnh (ảnh tự nhiên) là ảnh liên tục về không gian và độ sang. Để 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à độ sang
(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ểm như vậy gọi là điểm ảnh
(PEL: Picture Element) hay 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).
+ Điểm ảnh (Pixel) là một phần từ của ảnh số tại tọa đồ (x, y) với độ 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ừ ảnh.
- Độ phân giải của ảnh (Resolution)
+ Theo đị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 2 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*200. Thì cùng màn hình CGA 12” ta
thấy mịn hơn màn hình CGA 17” độ phân giải 320*200. Lý do: cùng một độ phân
giải nhưng diện tích màn hình rộng hơn thì độ mịn kém hơn.
 OpenCV:
+ OpenCV là dự án bắt đầu tại hãng Intel vào năm 1999 bởi Gary Bradsky và ra
mắt lần đầu tiên vào năm 2000. Sau đó Vadim Pisarevsky gia nhập và quản lý nhóm.
Vào năm 2005, OpenCV được sử dụng trên xe tự lái Stanley và chiếc này đã vô địch
giải đấu  2005 DARPA Grand. Tiếp theo nó tiếp tục được cải tiến và phát triển dưới
sự hỗ trợ của Willow Garage bên cạnh với Gary Bradsky và Vadim Pisarevsky. Hiện
tại OpenCV hỗ trợ vô số các thuật toán liên quan để lĩnh vực thị giác máy tính
(computer vision) và lĩnh vực học máy (machine learning).
OpenCV có thể sử dụng được ở hầu hết các ngôn ngữ như C++, Python, Java … và
các hệ điều hành khác nhau như Windows, Linux, OS X, Android, iOS. Ngoài ra nó
thể sử dụng card đồ họa GPU để xử lý nhằm tốc độ xử lý.

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 15


Ứng dụng IoT điều khiển Robot

Hình 2.2 : Phần mềm Opencv


- Trong phạm vi dự án , ngôn ngữ Python đã được nhóm lựa chọn cho việc lập trình các
module , function xử lí hình ảnh
2.1.2. Ngôn ngữ lập trình Python
- Python là một ngôn ngữ lập trình bậc cao cho các mục đích lập trình đa năng,
do Guido van Rossum tạo ra và lần đầu ra mắt vào năm 1991. Python được thiết kế với ưu
điểm mạnh là dễ đọc, dễ học và dễ nhớ. Python là ngôn ngữ có hình thức rất sáng sủa, cấu
trúc rõ ràng, thuận tiện cho người mới học lập trình. Cấu trúc của Python còn cho phép
người sử dụng viết mã lệnh với số lần gõ phím tối thiểu. [24] Vào tháng 7 năm 2018, Van
Rossum đã từ chức Leader trong cộng đồng ngôn ngữ Python sau 30 năm lãnh đạo
- Python ngày càng chứng minh ưu thế của mình trong việc xây dựng và triển khai nhiều
loại ứng dụng khác nhau như web application, desktop application, phân tích thống kê,
Machine Leaning, Deep Learning…. Đó là nhanh chóng, mạnh mẽ, thân thiện, có thể thực
thi ở mọi nơi và hoàn toàn miễn phí.

Hình 2.3 :Ngôn ngữ lập trình Python

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 16


Ứng dụng IoT điều khiển Robot

- Để tăng sự đồng bộ , cũng như hiệu quả của dự án , sự dễ hiểu trong từng câu lệnh cú
pháp . Thì nhóm em đã lựa chọn Micro-frameWork Flask , cho việc lập trình Server ,
quản lý việc giám sát và điều hành
2.1.3. web frameworks Flask :
- Flask là một web frameworks, nó thuộc loại micro-framework được xây dựng bằng
ngôn ngữ lập trình Python. Flask cho phép bạn xây dựng các ứng dụng web từ đơn giản
tới phức tạp. Nó có thể xây dựng các api nhỏ, ứng dụng web chẳng hạn như các trang
web, blog, trang wiki hoặc một website dựa theo thời gian hay thậm chí là một trang web
thương mại. Flask cung cấp công cụ, các thư viện và các công nghệ hỗ trợ để làm những
công việc trên.
- Flask là một micro-framework. Điều này có nghĩa Flask là một môi trường độc lập, ít
sử dụng các thư viện khác bên ngoài. Do vậy, Flask có ưu điểm là nhẹ, có rất ít lỗi do ít bị
phụ thuộc cũng như dễ dàng phát hiện và xử lý các lỗi bảo mật.
- Flask có nền tảng là Werkzeug và Jinja2 và nó đã trở thành một trong những Web
Framework phổ biến nhất của Python 

Hình 2.4 : Micro-framework Flask


- Các tính năng của Flask :
 Phát triển trình gỡ lỗi
 Hỗ trợ sẵn sàng để kiểm thử đơn vị
 Jinja2 templates
 RESTful request dispatch
 Hỗ trợ bảo mật cookie
 Full WSGI compliant
 Tài liệu mở rộng

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 17


Ứng dụng IoT điều khiển Robot

 Dựa trên Unicode


 Khả năng tương thích công cụ dựa trên ứng dụng Google
 Nhiều tiện ích mở rộng cho các tính năng mong muốn
 Tính modular và thiết kế gọn nhẹ
 ORM-agnostic
 Độ linh hoạt cao
 Cung cấp xử lý HTTP request
 API có độc đáo và mạch lạc
 Dễ dàng triển khai
2.1.4. Ngôn ngữ lập trình web HTML
- Nếu như web server được coi là mảnh đất trống , thì HTML (Hypertext Markup
Language) chính là những viên gạch giúp ta xây nên những căn nhà kiên cố . Nói đúng
hơn là Nó giúp người dùng tạo và cấu trúc các thành phần trong trang web hoặc ứng
dụng, phân chia các đoạn văn, heading, links, blockquotes, …
- HTML được sáng tạo bởi Tim Berners-Lee, nhà vật lý học của trung tâm nghiên cứu
CERN ở Thụy Sĩ. Anh ta đã nghĩ ra được ý tưởng cho hệ thống hypertext trên nền
Internet.
Hypertext có nghĩa là văn bản chứa links, nơi người xem có thể truy cập ngay lập tức.
Anh xuất bản phiên bản đầu tiên của HTML trong năm 1991 bao gồm 18 tag HTML. Từ
đó, mỗi phiên bản mới của HTML đều có thêm tag mới và attributes mới.
- Theo Mozilla Developer Network: HTML Element Reference, hiện tại có hơn 140
HTML tags, mặc dù một vài trong số chúng đã bị tạm ngưng (không hỗ trợ bởi các trình
duyệt hiện đại).
- Nhanh chóng phổ biến ở mức độ chóng mặt, HTML được xem như là chuẩn mật của
một website. Các thiết lập và cấu trúc HTML được vận hành và phát triển bởi World
Wide Web Consortium (W3C). Bạn có thể kiểm tra tình trạng mới nhất của ngôn ngữ này
bất kỳ lúc nào trên trang W3C’s website.
- Nâng cấp mới nhất gần đây là vào năm 2014, khi ra mắt chuẩn HTML5. Nó thêm vài
tags vào markup, để xác định rõ nội dung thuộc loại là gì, như là <article>, <header>,
và <footer>.

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 18


Ứng dụng IoT điều khiển Robot

 Các thẻ trong HTML


- Như đã đề cập ở trên, các trang HTML được quy định bằng các thẻ tag. Những thẻ
này được chứa trong các dấu ngoặc đơn dạng: <tên thẻ>. Trừ một vài thẻ đặc biệt, hầu
hết các thẻ cơ bản đều có các thẻ đóng tương ứng với nó. Ví dụ, thẻ <html> có thẻ đóng
tương ứng là </html>, thẻ <body> có thẻ đóng tương ứng là </body> … Dưới đây là các
mẫu thẻ tag bạn thường gặp trong HTML.

Hình 2.5 : Các thành phần của HTML


2.1.5. CSS (Cascading Style Sheet):
- Nếu như nói HTML là những viên gạch xây lên ngôi nhà , thì CSS sẽ là màu sơn ,
giúp ngôi nhà trở nên đẹp đẽ sáng lạng hơn
- CSS là ngôn ngữ tạo phong cách cho trang web – Cascading Style Sheet language. Nó
dùng để tạo phong cách và định kiểu cho những yếu tố được viết dưới dạng ngôn ngữ
đánh dấu, như là HTML. Nó có thể điều khiển định dạng của nhiều trang web cùng lúc để
tiết kiệm công sức cho người viết web. Nó phân biệt cách hiển thị của trang web với nội
dung chính của trang bằng cách điều khiển bố cục, màu sắc, và font chữ.
CSS được phát triển bởi W3C (World Wide Web Consortium) vào năm 1996, vì một
lý do đơn giản. HTML không được thiết kế để gắn tag để giúp định dạng trang web. Bạn
chỉ có thể dùng nó để “đánh dấu” lên site.
- Những tag như <font> được ra mắt trong HTML phiên bản 3.2, nó gây rất nhiều rắc
rối cho lập trình viên. Vì website có nhiều font khác nhau, màu nền và phong cách khác

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 19


Ứng dụng IoT điều khiển Robot

nhau. Để viết lại code cho trang web là cả một quá trình dài, cực nhọc. Vì vậy, CSS được
tạo bởi W3C là để giải quyết vấn đề này.
- Mối tương quan giữa HTML và CSS rất mật thiết. HTML là ngôn ngữ markup (nền
tảng của site) và CSS định hình phong cách (tất cả những gì tạo nên giao diện website),
chúng là không thể tách rời.

Hình 2.6 : Ngôn ngữ lập trình CSS


- Ngôn ngữ CSSJavascript :JavaScript là một ngôn ngữ lập trình hoặc ngôn ngữ kịch bản
cho phép triển khai những chức năng phức tạp trên trang web như hiển thị các cập nhật nội
dung kịp thời, tương tác với bản đồ, hoạt cảnh 2D/3D vv... - điều có sự hỗ trợ của
JavaScript. Nó là lớp thứ ba của chiếc bánh tiêu chuẩn của các công nghệ web, hai trong số
chúng (HTML và CSS) đã được chúng tôi trình bày rất chi tiết trong các phần khác của
Learning Area.
 HTML là ngôn ngữ đánh dấu được sử dụng để cấu thành nội dung và mang đến ngữ
nghĩa cho trang web, ví dụ như định danh cho các đoạn văn, tiêu đề, dữ liệu dạng
bảng hoặc nhúng hình ảnh, video vào trang web. 
 CSS là một ngôn ngữ định dạng được áp dụng để tạo nên "vẻ ngoài" của một trang
web, ví dụ thiết lập màu nền và font chữ, bố trí nội dung dựa theo mô hình cột.
 JavaScript là ngôn ngữ kịch bản cho phép tạo ra trang web động - cập nhật nội dung
theo ngữ cảnh, điều khiển đa phương tiện, hoạt cảnh các hình ảnh và nhiều thứ hay
ho khác. (Dĩ nhiên không phải mọi thứ, nhưng chỉ với một vài dòng code,
JavaScript có thể làm được nhiều điều đáng kinh ngạc.)

2.1.6. Jquery là gì :
- jQuery là thư viện được viết từ JavaScript, jQuery giúp xây dựng các chức năng bằng
Javascript dễ dàng, nhanh và giàu tính năng hơn.
jQuery được tích hợp nhiều module khác nhau. Từ module hiệu ứng cho đến module truy
vấn selector. jQuery được sử dụng đến 99% trên tổng số website trên thế giới.
Các module phổ biến của jQuery bao gồm:

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 20


Ứng dụng IoT điều khiển Robot

 Ajax – xử lý Ajax
 Atributes – Xử lý các thuộc tính của đối tượng HTML
 Effect – xử lý hiệu ứng
 Event – xử lý sự kiện
 Form – xử lý sự kiện liên quan tới form
 DOM – xử lý Data Object Model
 Selector – xử lý luồng lách giữa các đối tượng HTML
Bảng 1.1. Vai trò của jQuery với Javascript

Hình 2.7 : Tác động của jQuery


- jQuery là một thư viện JavaScript, giúp đơn giản hóa việc lập trình JavaScript
jQuery không phải là một ngôn ngữ lập trình riêng biệt mà hoạt động liên kết
với JavaScript. Với jQuery, bạn có thể làm được nhiều việc hơn mà lại tốn ít công sức
hơn. jQuery cung cấp các API giúp việc duyệt tài liệu HTML, hoạt ảnh, xử lý sự kiện và
thao tác AJAX đơn giản hơn. jQuery hoạt động tốt trên nhiều loại trình duyệt khác nhau.
 Các tính năng quan trọng của jQuery
- Gọn nhẹ: jQuery là một thư viện khá gọn nhẹ – có kích cỡ khoảng 19KB
(gzipped).
- Tương thích đa nền tảng: Nó tự động sửa lỗi và chạy được trên mọi trình duyệt phổ
biến như Chrome, Firefox, Safari, MS Edge, IE, Android và iOS.
- Dễ dàng tạo Ajax: Nhờ thư viện jQuery, code được viết bởi Ajax có thể dễ dàng
tương tác với server và cập nhật nội dung tự động mà không cần phải tải lại trang.
- Xử lý nhanh nhạy thao tác DOM: jQuery giúp lựa chọn các phần tử DOM để
traverse (duyệt) một cách dễ dàng, và chỉnh sửa nội dung của chúng bằng cách sử
dụng Selector mã nguồn mở, mà còn được gọi là Sizzle.
- Đơn giản hóa việc tạo hiệu ứng: Giống với code snippet có hiệu ứng animation, nó
phủ các dòng code và bạn chỉ việc thêm biến/nội dung vào thôi.

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 21


Ứng dụng IoT điều khiển Robot

- Hỗ trợ tốt phương thức sự kiện HTML: Xử lý sự kiện − jQuery xử lý các sự kiện
đa dạng mà không làm cho HTML code trở nên lộn xộn với các Event Handler.
2.1.7. SocketIo
- Socket.io là một module trong Node.js được phát triển vào năm 2010. Nó được phát
triển để sử dụng các kết nối mở để tạo điều kiện giao tiếp thời gian thực, trả về giá trị thực
ở tại thời điểm đó. Socket.io cho phép giao tiếp hai chiều giữa máy khách và máy chủ.
Giao tiếp hai chiều được bật khi máy khách có Socket.io trong trình duyệt và máy chủ
cũng đã tích hợp gói Socket.io
- Nó được sử dụng trong việc xây dựng các ứng dụng web real-time cần tốc độ phản hồi
ngay lập tức như: chat, trực tiếp bóng đá,.... Socket.io xây dựng dựa trên Engine.IO, đầu
tiên nó sẽ thiết lập một kết nối long-polling, sau đó cố gắng nâng cấp lên các kết nối khác
tốt hơn giống như WebSocket.
- Ngoài Socket.io chúng ta còn có một vài kết nối khác như:
 Trong long-polling, client sẽ gửi yêu cầu giống AJAX đến máy chủ. Với mỗi lần
nhận được yêu cầu, máy chủ sẽ gửi phản hồi lại nếu & khi có cập nhật mới. Tại
đây, clients sẽ liên tục & định kỳ yêu cầu cập nhật từ máy chủ, thông qua các kết
nối TCP riêng biệt, làm tắc nghẽn lưu lượng mạng.
 Trong short-polling, clients định kỳ gửi yêu cầu đến máy chủ để hỏi xem có gì mới
không. Máy chủ không đợi, nhưng gửi lại nếu có cập nhật hoặc chỉ có tin nhắn
trống. Ở đây, mạng thậm chí còn tắc nghẽn hơn với các yêu cầu liên tục này, ngay
cả khi không có bản cập nhật.
 Trong WebSockets, sẽ luôn có một kết nối TCP giữa clients và server. Có luồng dữ
liệu hai chiều giữa clients và server cũng như tính chất thời gian thực do luôn kết
nối TCP mở. Trong các phương thức, có tiềm năng rất lớn để tăng tốc độ trong
WebSockets. Dung lượng phần header của giao thức HTTP là 100 byte, trong khi
phần header của socket chỉ là 2 byte. Vì vậy, sau khi sử dụng HTTP ban đầu,
Sockets có thể giao tiếp với tài nguyên ít hơn nhiều. Với nhiều số lượng yêu cầu
được gửi đến thì nó cũng sẻ làm tăng thời gian phản hồi từ server tới clients.
 Socket.io KHÔNG phải là phát triển dựa trên WebSocket. Mặc dù Socket.io thực
sự sử dụng WebSocket như một cách để giao tiếp trong một vài trường
hợp, Socket.io sẽ bổ sung một số siêu dữ liệu cho mỗi gói: loại gói, không gian tên
và id gói khi cần xác nhận thông báo. Đó là lý do tại sao máy khách WebSocket sẽ
không thể kết nối thành công với máy chủ Socket.io và máy khách Socket.io cũng
sẽ không thể kết nối với máy chủ WebSocket.

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 22


Ứng dụng IoT điều khiển Robot

Hình 2.8 :Mô hình SocketIO

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 23


Ứng dụng IoT điều khiển Robot

2.1.8. Đa luồng (Multithreading)


- Một chương trình đa luồng chứa hai hoặc nhiều phần mà có thể chạy đồng thời và mỗi
phần có thể xử lý tác vụ khác nhau tại cùng một thời điểm, để sử dụng tốt nhất các nguồn
có sẵn, đặc biệt khi máy tính CPU.
- Python cung cấp thread Module và threading Module để có thể bắt đầu một thread mới
cũng như một số tác vụ khác trong khi lập trình đa luồng. Mỗi một Thread đều có vòng đời
chung là bắt đầu, chạy và kết thúc. Một Thread có thể bị ngắt (interrupt), hoặc tạm thời bị
dừng (sleeping) trong khi các Thread khác đang chạy – được gọi là yielding.
2.2. Tổng quan về thiết bị sử dụng :
2.2.1. Giới thiệu chung về Adruino Uno R3

Hình 2.9 : Adruino Uno R3


- Arduino UNO R3 dùng vi điều khiển ATmega328 làm bộ xử lý trung tâm, có 14 chân
vào/ra số (trong đó có 6 chân PWM), 8 đầu vào Analog, 1 UART (phần cứng cổng nối
tiếp), một thạch anh dao động 16MHz, một cổng kết nối USB, một cổng ICSP và một nút
reset. Arduino UNO R3 chứa tất cả mọi thứ cần thiết để hỗ trợ cho vi điều khiển, chỉ cần
kết nối nó với máy tính bằng cáp USB hoặc nguồn một chiều để bắt đầu hoạt động.
- Thông số kỹ thuật:
Vi điều khiển ATmega328 họ 8 bit
Điện áp hoạt động 5V DC (chỉ đượng cung cấp qua cổng USB)
Tần số hoạt động 16MHz
Dòng tiêu thụ Khoảng 30mA
Điện áp vào giới hạn 6-20V DC
Số chân Digital I/O 14 (6 chân Hardware PWM)
Số chân Analog 6 (độ phân giải 10 bit)

thông số kỹ thuật của Adruino Uno R3

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 24


Ứng dụng IoT điều khiển Robot

 Ngoài ra Adruino Uno R3 còn có các tính năng ưu việt khác:


- Khả năng chống nhiều tốt
- Khả năng chống xung đột giữa các nguồn điện cung cấp cho mạch\
- Khả năng bảo vệ khi xảy ra quá dòng, quá áp hay ngắn mạch
- Hỗ trợ nhiều giao tiếp UART,I2C, … cho phép dễ dang kết nối với các module,
các vi điều khiển khác
- Mã nguồn mở, môi trường lập trình thuận tiện
2.2.2. . Máy tính nhúng Raspberry
- Theo yêu cầu của đồ án và những thiếu sót của module Adruino uno R3:
 Truyền hình ảnh thực tế về để giám sát.
 Xử lý hình ảnh để đưa ra lệnh điều khiển robot, đưa ra các cảnh báo.
 Truyền dữ liệu lớn lên web điều khiển cũng như thừ Web điều khiển xuống robot.
 Lưu trữ các chường trình điều khiển.
 Xử lý các vấn đề điều khiển thông minh.
 Không có khả năng nạp lại chương trình điều khiển từ xa.
- Những yêu cầu trên vượt ngoài khả năng của board Arduino Uno R3. Vì vậy cần một
module điều khiển có khả năng xử lý đa tác vụ, cũng như có bộ nhớ đủ lớn để lưu trữ, xử
lý dữ liệu trong quá trình robot hoạt động, đồng thời có khả năng kết nối Wifi.
- Sau khi tìm hiểu nhóm quyết định sử dụng them máy tính nhúng Raspberry Pi 3B+.
Việc sử dụng module này ngoài việc đáp ứng được các yêu cầu của đề tài còn có tích hợp
sẵn nhiều tài nguyên, các chuẩn giao tiếp mở rộng khác, tạo điều kiện để tiếp tục phát
triển đề tài sau nay.

`
Hình 2.10 :Module máy tính nhúng Raspberry Pi 3B+

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 25


Ứng dụng IoT điều khiển Robot

- Thông số kỹ thuật:
 Vi xử lý: Broadcom BCM2837B0, quad-core A53 (ARMv8) 64-bit SoC @1.4GHz
 RAM: 1GB LPDDR2 SDRAM
 Kết nối: 2.4GHz and 5GHz IEEE 802.11 b/g/n/ac wireless LAN, Bluetooth 4.2,
BLE, Gigabit Ethernet over USB 2.0 (Tối đa 300Mbps).
 Cổng USB: 4 x 2.0
 Mở rộng: 40-pin GPIO
 Video và âm thanh: 1 cổng full-sized HDMI, Cổng MIPI DSI Display, cổng MIPI
CSI Camera, cổng stereo output và composite video 4 chân.
 Multimedia: H.264, MPEG-4 decode (1080p30), H.264 encode (1080p30);
OpenGL ES 1.1, 2.0 graphics
 Lưu trữ: MicroSD
 Nguồn điện sử dụng: 5V/2.5A DC cổng microUSB, 5V DC trên chân GPIO,
Power over Ethernet (PoE) (yêu cầu thêm PoE HAT)
- Hệ điều hành
 Raspberry Pi 3B+ chủ yếu sử dụng hệ điều hành trên nhân Linux ngoài ra chúng
còn có thể được sử dụng trên rất nhiều hệ điều hành khác như Arch Linux ARM,
OpenELEC, Pidora, Raspbian, …
2.2.3. USB Camera

Hình 2.11: Camera HD C270 Logitech

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 26


Ứng dụng IoT điều khiển Robot

- Thông số kỹ thuật
 Độ phân giải tối đa: 1.3MP chuẩn HD 720p
 Loại tiêu cự: Lấy nét cố định
 Công nghệ thấu kính: tiêu chuẩn
 Micro tích hợp: đơn âm
 Phạm vi quan sát: 60°
 USB 2.0 tốc độ cao
- Tính năng
 Với công nghệ Fluid Crytal cho hình ảnh rõ nét và trung thực Loại tiêu cự: Lấy nét
cố định.
 Tự động cân bằng sáng.
 Tương thích nhiều hệ điều hành: Windows, Linux, … và nhiều ứng dụng.
2.2.4. Cảm biến nhiệt độ:
- Cảm biến nhiệt độ LM35 có điện áp Analog đầu ra tuyến tính theo nhiệt độ thường
được sử dụng để đo nhiệt độ của môi trường hoặc theo dõi nhiệt độ của thiết bị,..., cảm
biến có kiểu chân TO-92 với chỉ 3 chân rất dễ giao tiếp và sử dụng.

Hình 2.12: Cảm biến nhiệt độ LM35

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 27


Ứng dụng IoT điều khiển Robot

- Thông số kỹ thuật:
 Điện áp hoạt động: 4~20VDC
 Công suất tiêu thụ: khoảng 60uA
 Khoảng đo: -55°C đến 150°C
 Điện áp tuyến tính theo nhiệt độ: 10mV/°C
 Sai số: 0.25°C
 Kiểu chân: TO92
 Kích thước: 4.3 × 4.3mm
2.2.5. Cảm biến hồng ngoại :
- Cảm biến hồng ngoại khi hoạt động, tia hồng ngoại phát ra một tần số nhất định, khi
phát hiện hướng truyền có vật cản (mặt phản xạ), phản xạ vào đèn thu hồng ngoại, sau khi
so sánh, đèn màu xanh sẽ sáng lên đồng thời đầu cho tín hiệu số đầu ra (một tín hiệu
bậc thấp).
- Khoảng cách làm việc hiệu quả 2 ~ 5cm, điện áp làm việc là 3.3 V đến 5V. Độ nhạy
sáng của cảm biến được điều chỉnh bằng chiết áp, cảm biến dễ lắp ráp, dễ sử dụng,.... 
- Có thể được sử dụng rộng rãi trong robot tránh chướng ngại vật, xe tránh chướng ngại
vật  và dò đường..

Hình 2.13 : Cảm biến hồng ngoại

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 28


Ứng dụng IoT điều khiển Robot

- Thông số kỹ thuật:
 Bộ so sánh sử dụng LM393, làm việc ổn định 
 Điện áp làm việc: 3.3V - 5V DC.
 Khi bật nguồn, đèn báo nguồn màu đỏ sáng.
 Lỗ vít 3 mm, dễ dàng cố định, lắp đặt. 
 Kích thước: 3.2cm * 1.4cm 
 Các mô-đun đã được so sánh điện áp ngưỡng thông qua chiết áp, nếu sử dụng ở
chế độ thông thường, xin vui lòng không tự ý điều chỉnh chiết áp. 
- Cổng giao tiếp :
 VCC: điện áp chuyển đổi từ 3.3V đến 5V (có thể được kết nối trực tiếp đến vi
điều khiển  5V và 3.3V) 
 GND: GND ngoài 
 OUT: đầu ra kỹ thuật số (0 và 1)
2.2.6. Khối nguồn
- Raspberry Pi 3 có điện áp hoạt động ổn định: 5VDC, dòng điện 2A. Nên
nhóm sẽ dùng nguồn từ sạc dự phòng output 5VDC - 2A để cấp cho kit.

Hình 2.14: Sạc dự phòng cấp nguồn cho kit raspberry Pi

 Chương tiếp theo CHƯƠNG 3 đi sâu vào nghiên cứu cách kết hợp các công nghệ và
thiết bị để tạo ra sản phẩm

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 29


Ứng dụng IoT điều khiển Robot

CHƯƠNG 3: XÂY DỰNG THIẾT KẾ HỆ THỐNG ĐIỀU KHIẾN GIÁM


SÁT

3.1. Xây dựng chương trình xử lý hình ảnh :


Dựa trên nhưng khái niệm cơ bản về hình ảnh trong chương 2 , ta áp dụng để xây dựng
thuật toán xử lí ảnh . Như trò chơi hồi thuở nhỏ , trò xếp hình . Có rất nhiều mảnh ghép ,
và câu hỏi đặt ra là ta phải xếp từng mảnh như thế nào để hoàn thiện trò chơi . Câu trả lời
là ta nhìn vào từng mảnh cụ thể có đặc tính là duy nhất , chúng ta tìm các tính năng này
trong bức ảnh , chúng ta căn chỉnh chúng

Hình 3.1 :Minh họa các Feature trong một khung hình
- Ví dụ như bức ảnh trên , đặt ra bài toán phải tìm các khung hình A,B,C,D,E,F trong
bức ảnh tòa nhà lớn ấy . Có bao nhiêu kết quả đúng chính xác mà ta có thể tìm được ?
 A, B : là những mặt phẳng , nó trải dài trên rất nhiều khu vực , Vì thế rất khó xác
định đúng chính xác

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 30


Ứng dụng IoT điều khiển Robot

 C ,D thì đơn giản hơn , nó là những cạnh của tòa nhà . Ta có thể ước chừng địa
điểm , nhưng để chính xác thì hơi khó . Bởi vì dọc theo cạnh dài ấy , no đều giống
nhau . Nhưng mà nếu so với A,B thì C,D dễ xác định hơn nhiều
 E,F : là những góc của tòa nhà . Và chúng cực kì dễ để nhận ra . Do đó ta có thể
coi E,F là những đặc tính tốt ( good feature)
* Từ đây trở về sau sẽ dùng feature thay cho đặc tính
- Mục tiêu đồ án của nhóm em là xử lí ảnh để xác định các vật thể trên đường dây , Với
số vật thể N cho trước đều có hình ảnh xác định , đặt trong thư mục QueryImage . Do đó
ý tưởng đưa ra là tìm tất cả các Feature , được mô tả bằng KeyPoint Descriptor , cho N
vật thể xác định trước tất , cho tất cả vào một mảng . Từ camera thu được từng khung
hình , ta xử lí từng khung hình , rồi trích xuất các Feature , duyệt qua mảng chứa Feature
của vật thể cần xác định , nếu kết quả của lần lặp nào , So khớp giữa 2 feature lớn hơn
một ngưỡng (Threshold) cho trước , thì ta ghi nhận đó chính là vật thể ấy

Hình 3.2 :Lưu đồ thuật toán cho việc xác định vật thể

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 31


Ứng dụng IoT điều khiển Robot

3.1.1. Các thuật toán giúp tìm ra Feature (biểu diễn bởi keypoint descriptor)
 FAST Keypoint detector
- Đây là bộ Keypoint Detector đơn giản, trực quan và nhanh nhất. FAST được sử dụng
để xác định các corners (góc) của trong bức ảnh.
- Giả thuyết của FAST detector là, để một pixel P được coi là “corner” thì cần có ít nhất
n pixel liền kề cùng thuộc một đường tròn tâm P bán kính R có cường độ lớn hơn hoặc
nhỏ hơn center pixel P một giá trị T.

Hình 3.3 – Giả thuyết của FAST detector


- Trong hình 3 chúng ta có center pixel P và đường tròn bán kính R=3 gồm 16 pixels.
Trên thực tế, chúng ta thường chọn R=3, tương ứng với đường tròn chứa 16 pixel và n=9
hoặc n=12. Hãy xem một ví dụ ở hình 4.

Hình 3.4: Ví dụ về FAST descriptor

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 32


Ứng dụng IoT điều khiển Robot

- Chúng ta có pixel trung tâm P=32, đường tròn tâm P bán kính R=3 gồm 16 pixel. Để
pixel P được coi là “corner” cần ít nhất n=12 pixels có cường độ lớn hơn (hoặc nhỏ hơn)
P một giá trị threshold T=16. Trong số 16 pixels này có đến 14 pixels có cường độ lớn
hơn P (màu xanh lá), như vậy có thể kết luận rằng P là một “corner”.
 BRISK KEYPOINT DETECTOR
- Binary Robust Invariant Scalable Keypoint (BRISK) Detector là một bản nâng cấp của
FAST, cho phép detector hoạt động tốt khi space scale thay đổi (space scale invariance).

Hình 3.5.: Kim tự tháp chứa các bức ảnh đã được resize
- Thay vì chỉ làm việc trên một bức ảnh duy nhất như FAST, BRISK sẽ resize bức ảnh
input thành nhiều bức nhỏ hơn, xem hình 5.
- Với mỗi bức ảnh trong kim tự tháp trên, chúng ta sẽ áp dụng thuật toán của FAST
detector để tìm ra “corner”. Vì không yêu cầu tài nguyên tính toán lớn nên BRISK rất phù
hợp cho các ứng dụng real-time.
 ORB KEYPOINT DETECTOR
- ORB Detector là một bản nâng cấp của BRISK, cho phép nó hoạt động tốt ngay cả khi
keypoint bị xoay (rotation invariance).
- Sau khi đã tìm ra tất cả “corner” trong tất cả các bức ảnh trong kim tự tháp, ORB sẽ
chọn ra tối đa 500 “corner” tốt nhất. Vùng pixel xung quanh từng “corner” này sẽ được
khảo sát để tìm ra “Trọng tâm của cường độ” (intensity centroid).

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 33


Ứng dụng IoT điều khiển Robot

 Moments: 

 Center of mass: 
 Keypoint dù có xoay một góc    cũng sẽ
được phát hiện.
- Tương tự như FAST và BRISK, ORB detector rất phù hợp cho các ứng dụng real-
time.
Để tối ưu nhất , ta chọn thuật toán ORB KEYPOINT DETECTOR
3.1.2. Thuật toán giúp Matching Feautre:
- Ta dung Brute-Force Matcher , thuật toán đơn giản thực hiện bằng cách lấy từng
descriptor so sánh với nhau sử dụng việc tính toán khoảng cách , và cái gần nhất (tức là
khớp nhất) sẽ được trả về
3.1.3 : Áp dụng các thuật toán và công nghệ trên vào phần mềm OpenCV
- Do chúng ta cần xác định một số N vật thể cho trước ,tất cả đều được đặt vào thư mục
QueryImage , nên đầu tiên ta cần lấy từng ảnh , và tên của chúng ra , để tiện cho việc xác
định sau này
STT Dòng lệnh Chú thích
path = r'C:\Users\OS\Desktop\Flaskproject Đây là đường dẫn của thưa mục
1
\static\queryPictures1' chứ ảnh
Tạo mảng để lưu các bức ảnh (các
2 images = [] bức ảnh khi đọc vào sẽ ở dạng
mảng numpy)
Tạo mảng để lưu tên gọi phục vụ
3 classname = []
cho việc xác định vật thể sau này
Chuyển thành đường dẫn trong
4 myList = os.listdir(path) OS(Operation System) giúp máy
tính có thể hiểu được
Tạo object ORB với số feature tối
5 orb = cv2.ORB_create(nfeatures=1000)
đa là 1000
6 for cl in myList: Vòng lặp lần lượt qua từng ảnh
Tên của ảnh có 2 phần . Ví dụ
7     imgCur = cv2.imread(f'{path}/{cl}',0) Anh.jpg thì ta chỉ cần quan tâm
đến phần Anh , còn jpg thì không

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 34


Ứng dụng IoT điều khiển Robot

STT Dòng lệnh Chú thích


Thêm ảnh vừa thu được vào mảng
8     images.append(imgCur)
images
Bảng 3.1: Lập trình lấy tên và hình ảnh từ thư mục QueryImage
- Sau đó , chúng ta dùng ORB keypoint detector để xác định feature cho từng ảnh
STT Dòng lệnh Chú thích
1 def findDes(images): Định nghĩa hàm
2     desList = [] Tạo mảng để lưu trữ
3     for img in images: Vòng lặp duyệt qua các phần từ
Lấy ra keypoint , và desciptor
        kp,des = orb.detectAndCompute
4 bằng cách dùng hàm dựa trên thuật
(img,None)
toán ORB
Ta quan tâm tới các descriptor nên
5         desList.append(des)
chỉ lấy desciptor
Trả về hàm lưu trữ tất descriptor
6     return desList
của từng ảnh
Bảng 3.2 : Lập trình Lấy descriptor trong từng Ảnh
- Tiếp đó là tạo ra một Object trong python , Object có các method (function ) giúp để
tìm ra Feature bằng ORB keypoint detector trong từng Frame , và sau đó dùng BruteForce
Feature Matching để trả về kết quả :
STT Dòng lệnh Chú thích
1 class Videoshow: Định nghĩa Object
Hàm init dùng để khởi tạo
    def __init__(self, frame=None, thres=15,
2 các giá trị ban đầu cho
  desList=None,classname=None):
Object
        self.imgGray = cv2.cvtColor(frame,  Chuyển ảnh thu được về
3
cv2.COLOR_BGR2GRAY) dạng gray
        (self.kp2, self.des2) = orb.detectAndCompute
4 Lấy ra descriptor của frame
(self.imgGray, None)
Tạo Object BruteForce để
5         self.bf = cv2.BFMatcher()
match từng descriptor
6         self.matchList = [] Khởi tạo mảng lưu giá trị
7         self.finalVal = -1 Khởi tạo giá trị ban đầu , giá
trị này trả về trị số index ,
tức là tên của đối tượng

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 35


Ứng dụng IoT điều khiển Robot

STT Dòng lệnh Chú thích


trong mảng
Thres chính là ngưỡng , tức
là số match cần có tối thiểu
8         self.thres = thres
thì ta mới ghi nhận đó là đối
tượng
Khởi tạo khung hình ban
9         self.frame = frame
đầu
Biến để dừng chương trình
10         self.stopped = False
lại
desList là mảng lưu tất cả
11         self.desList = desList giá trị descriptor của các ảnh
trong QueryImage
12         self.classNames=classname classNames chính là tên gọi
13     def start(self): Định nghĩa hàm start
Chạy Thread (phân luồng)
giúp tăng tốc độ xử lí , với
14         Thread(target=self.show,args=()).start()
dội tượng cần phân luồng
chính là hàm show
15         return self Trả về chính nó
16     def show(self): Định nghĩa hàm
Luôn chạy trừ khi điều kiện
17         while not self.stopped:
dừng lại được kích hoạt
18             try: Luôn thử lại
Với từng descriptor của từng
19                 for self.des in self.desList:
Image
Lưu các giá trị match được .
                    self.matches = self.bf.knnMatch Với mỗi match thu được
20
(self.des, self.des2, k=2) k=2 keypoint tiện cho việc
so sánh
21                     self.good = [] Khởi tạo mảng
22                     for self.m, self.n in self.matches: Với mỗi keypoint thu được
                        if self.m.distance <  ta sẽ kiểm tra , vì thuật toán
23
0.75 * self.n.distance: BF ở đây dùng để tính
24                             self.good.append([self.m])
khoảng cách , nếu khoảng
25                     self.matchList.append(len(self.good))
cách càng nhỏ thì càng tốt .

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 36


Ứng dụng IoT điều khiển Robot

STT Dòng lệnh Chú thích

Sau khi chọn được keypoint


tối ưu hơn ta sẽ add nó vào
26             except: Trường hợp ngoại lệ khi
không match được cái nào
27                 pass thì ta bỏ qua không làm gì
cả
Nếu độ dài Matchlist thu
28             if len(self.matchList) != 0:
được lớn hơn không
29                 if max(self.matchList) > self.thres: Và nếu mỗi Match có số
lượng phần tử thu được lớn
                    self.finalVal = self.matchList.index
30 hơn ngưỡng thì ta sẽ ghi
(max(self.matchList))
nhận
Nếu không lớn hơn ngưỡng
31                 else:self.finalVal = -1 thì trả về id = -1 tức là
không xác định được vật
Nếu độ dài mảng Matchlist
không lớn hơn 0 thì trả về id
32             else: self.finalVal = -1
= -1 tức là không xác định
được vật
Khởi tạo lại mảng Matchlist
33             self.matchList = []
bằng rỗng
34     def find(self): Định nghĩa hàm trả về kết
35         return self.finalVal quả id là index của phần tử ,
37         self.stopped = True thuận tiện trong quá trình
truy xuất sau này
Bảng 3.3 : Lập trình lấy để lấy ra match giữa frame và từng Ảnh , sau đó trả về tên
vật thể
3.2. Xây dựng giao diện giám sát
- Như đã nói ở trên , chúng em sử dụng Flask web micro framework để làm server cho
việc giám sát và truyền tải thông tin
Đầu tiên ta cần download Flask từ máy tính nhúng Raspberry , bằng cách bật Terminal và

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 37


Ứng dụng IoT điều khiển Robot

Sudo apt-get install python3 Flask


- Sau đó ta xây dựng cấu trúc thư mục như sau
/webapp
/static
/main.css
/QueryImage
/templates
/index.html
/app.py
- Toàn bộ nội dung về xử lý ảnh và lập trình Server đều sẽ được đặt hết vào file app.py ,
còn file index.html chứa nội dung thiết kế cho Client , và file main.css giúp cải thiện giao
diện Client cho đẹp hơn . Xét đến Template cho phép chúng ta thực hiện việc phân tách
giữa phần trình bày và logic của ứng dụng. Trong Flask, các template được viết trong các
file khác nhau và lưu trong thư mục con templates của gói ứng dụng. Quá trình chuyển
đổi template thành một trang HTML được gọi là quá trình kết xuất hay kiến tạo (render).
Để kết xuất template, chúng ta phải tham chiếu đến một hàm trong Flask gọi là
render_template(). Hàm này nhận vào tên file và một danh sách các tham số của template
và trả về template đó, nhưng thay thế các vùng chứa (placeholder) bằng các giá trị tương
ứng. Hàm render_template() sẽ gọi đến Jinja2 – là một chương trình (engine) cho
template – có sẵn trong Flask. Jinja2 sẽ thay thế các đoạn mã trong các khối {{ ... }} bằng
các giá trị tương ứng từ các tham số được cung cấp khi gọi hàm render_template().

STT Dòng lệnh Chú thích


Định nghĩa cho hàm ở dưới sẽ
1 @app.route('/')
phục vụ cho root nào
2 def index(): Định nghĩa hàm
3     return render_template('index.html') Trả về template
Bàng 3.4 : Route cơ bản của Flask
STT Dòng lệnh Chú thích
Định nghĩa cho hàm ở dưới sẽ
1 @app.route('/video_feed')
phục vụ cho root nào
2 def video_feed(): Định nghĩa hàm
3 print('video feed') In ra dòng chữ
4 return

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 38


Ứng dụng IoT điều khiển Robot

STT Dòng lệnh Chú thích


Response(gen_frames(),mimetype='multipart/x-
mixed-replace;boundary=frame')
Bảng 3.5 : Phần Route dành cho việc Streaming Video
- Về nội dung được streaming lên , nó là tuần tự các frame được truyền lên và lần lượt
được thay thê nhau , tất cả đều được lấy từ Route (‘/video_feed’) , sẽ trả về hàm
gen_frames()
STT Dòng lệnh Chú thích
Định nghĩa hàm với tham số
1 def gen_frames(src=0):
đầu vào là 0
Bắt đầu chạy Thread cho phần
2 video_getter = Videoget(src).start()
thu thập ảnh từ camera
Bắt đầu chạy Thread cho phần
video_shower=Videoshow(video_getter.fram
3 xử lí ảnh với các thông số đầu
e, 15, desList,classname).start()
vào
4 while 1: Vòng lặp vô hạn
5 start = time.perf_counter() Đếm thời gian
if video_getter.stopped or
6
video_shower.stopped:
7 video_shower.stop() Nếu điều khiện dừng được
8 video_getter.stop()
thỏa mãn thì dừng lại
9 video_getter.stream.release()
10 cv2.destroyAllWindows()
11 break
Lấy khung hình mới từ Thread
12 video_shower.frame = video_getter.frame
video_getter
13 global id Khởi tạo biến toàn cục
Lấy giá trị bằng kết quả return
14 id = video_shower.find() của hàm find trong object
video_shower
video_shower.imgGray =
Chuyển hình ảnh qua dạng
15 cv2.cvtColor(video_getter.frame,
gray
cv2.COLOR_BGR2GRAY)
(video_shower.kp2, video_shower.des2) =
Lấy keypoint và descriptor của
16 orb.detectAndCompute(video_shower.imgGray,
hình ảnh mới thu được
None)

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 39


Ứng dụng IoT điều khiển Robot

STT Dòng lệnh Chú thích


17 video_shower.bf = cv2.BFMatcher() Truyền vào BF matcher
18 if not video_getter.grabbed: Nếu thỏa mãn điều kiện dừng
19 break lại thì thoát
20 else:
ret,buffer =
21
cv2.imencode('.jpg',video_shower.frame)
22 frame = buffer.tobytes()
23 finish = time.perf_counter() Nếu không thỏa mãn thì nén
print(f'thoi gian thuc hien la {1/(finish- lại dạng jpg và gửi lên server
24
start)}')
25 yield(b'--frame\r\n'
b'Content-
26
Type:image/jpeg\r\n\r\n'+frame+b'\r\n')
Bảng 3.6 : Phần chương trình giúp trả về khung hình và xác định vật thể
- Để có thể sử dụng được chức năng cập nhật thông tin lên trang web theo từng khoảng
thời gian thì ta sử dụng SocketIO của flask . Socketio sẽ tạo ra một kết nối liên tục giữa
Server và Client , tạo ra một Listene lắng nghe Event ( sự kiện được gọi ) . Nếu phát hiện
thấy Event được gọi thì sẽ thực hiện hàm để làm một nhiệm vụ cụ thể , ở đây bên phía
Server side . Ở phía server thì ta sử dụng Socketio bằng cách ghi lệnh:
from flask_socketio import SocketIO,emit
- Còn bên phía Client, thì để dùng được Socket thì ta tải file từ CDN (Control Delivery
Network) . Việc load file từ CDN , mà không phải là từ thư mục static sẽ có các lợi ích :
 Cải thiện tốc độ tải trang, tăng tốc độ truy cập
 Xử lý tải lưu lượng truy cập cao
 Chặn người gửi spam, trình gỡ rối và các bot không hợp lệ khác
 Tiết kiệm chi phí
 Giảm mức tiêu thụ, tiết kiệm băng thông cho máy chủ gốc
 Cân bằng tải giữa nhiều máy chủ, tiết kiệm dung lượng
 Bảo vệ trang web của bạn khỏi các cuộc tấn công DDoS
 Bảo vệ ứng dụng của bạn
- Do đó ta nạp file vào phía client , ở phần <script>(dành cho Javascript) ta nhập:

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 40


Ứng dụng IoT điều khiển Robot

<scriptsrc="//cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js"integrity="sha
256-yr4fRk/GU1ehYJPAs8P4JlTgu0Hdsp4ZKrx8bDEDC3I="
crossorigin="anonymous"></script>

 Ý tưởng cập nhật dữ liệu cho web :


- Từ khái niệm và lợi ích của SocketIo , luôn tạo đường dẫn giữa Client và Server và
luôn lắng nghe các sự kiện được gọi . Client sẽ luôn gọi hàm để cập nhật dữ liệu từ server
bằng cách gọi một sự kiện đã được thiết lập bên server side
setInterval(function(){console.log('interval');socket.emit('guidi',i);}},1000);
- SetInterval (func,time) sẽ gọi hàm funcion sau time(ms) , và ở trong function , ta gửi
dữ liệu tới Event ‘guidi’ , chính việc gửi dữ liệu tới Event ‘guidi’ , phía server sẽ lắng
nghe và biết rằng Client đang muốn gọi để cập nhật dữ liệu
- Quay lại Server side:
STT Dòng lệnh Chú thích
1 dulieudualen = json.loads(dulieu)
2 if(ser.in_waiting>0):
3 line = ser.readline()
4 data = float(line)
5 dulieudualen['Nhietdo'] = data
6 if id==-1:
dulieudualen['tendoituong'] = 'ĐƯỜNG
7
DÂY'
8 else:
dulieudualen['tendoituong'] =
9
classname[id]
10 print('on guidi-')
socketio.emit('mess_from_server',
11
json.dumps(dulieudualen))
Bảng 3.7 : Tạo socket để lắng nghe sự kiện bên phía Server
- Listener được tạo ra lắng nghe sự kiện Gửi đi , nếu sự kiện Gửi đi được gọi tên , thì
Server sẽ đưa dữ liệu lên . Dữ liệu đưa lên có dạng JSON (Javascript Object Notation) ,là
kiểu dữ liệu đơn giản dùng để truyền tải dữ liệu , có dạng là một Object , và trong Object
này có các key lần lượt là : tên đối tượng , Nhiệt độ , khoảng cách . Với từng key sẽ có
từng value tương ứng . Server sẽ gửi dữ liệu lên bằng cách gọi sự kiện
“Mess_from_server” để báo cho bên client side biết đây là lúc cập nhật dữ liệu
- Lúc này thì bên phía Client sẽ có Listenr để lắng nghe “Mess_from_server”

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 41


Ứng dụng IoT điều khiển Robot

STT Dòng lệnh Chú thích


Tạo ra listener lắng
1 socket.on('mess_from_server',(msg)=>{ nghe sự kiện
‘mess_from_server’
if (JSON.parse(msg)  Nếu key của object
2
["tendoituong"]=="chuoithuytinh"){ truyền lên là
‘chuoithuytinh’
3 $('.object').html('Chuỗi thủy tinh');  Thì gán giá trị đó cho
Object
4 }  
Else if (JSON.parse(msg)  Nếu key của object
5
["tendoituong"]=="khungdinhvi"){ truyền lên là
6 $('.object').html('Khung định vị'); ‘khungthuy tinh’
7 $('.objecthanhdong').html('Chạy qua');  Thì gán giá trị đó cho
Object
8 }  
else if (JSON.parse(msg)  Nếu key của object
9
["tendoituong"]=="chuoidungjpg"){ truyền lên là
‘chuoithuytinh’
 Thì gán giá trị đó cho
10 $('.object').html('Chuỗi đứng');}
Object
 
 Còn ngược lại thì
truyền value của key
else {$('.object').html(JSON.parse(msg)
11 tendoituong trong
["tendoituong"]);}
object

 Ghi giá trị nhiệt độ


12 if (JSON.parse(msg)["Nhietdo"]>40){
truyền lên
 So sánh với nhiệt độ
$('.objecttemp').html('Cảnh báo nhiệt cho trước , nếu vượt
13
độ');} }) quá thì ghi quá nhiệt
độ
Bảng 3.8 : Phần chương trình giúp hiển thị đối tượng lên web

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 42


Ứng dụng IoT điều khiển Robot

- Bằng cách lắng nghe tới sự kiện “Mess_from_server” , khi được gọi thì nó sẽ chuyển
data gửi lên từ Server , Giải nghĩa nó ra để chuyển từ JSON về Object bình thường , và
thay thế vào từng nội dung tương ứng
3.2.2 : Xây dựng giao diện người dùng (Client)
- Để xây dựng giao điện người dùng thuận tiện cho việc quản lý và giám sát, ta tạo ra
file index.html . Cấu trúc một file index.html như sau :

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 43


Ứng dụng IoT điều khiển Robot

STT Dòng lệnh Chú thích


 Quy định cách bố cục
1 <!DOCTYPE html> trang web theo chuẩn
HTML
 Định dạng ngôn ngữ
2 <html lang="en">
là tiếng anh
 Thẻ head cặp thẻ này
sẽ có nhiệm vụ để bạn
khai báo thông tin tài
3 <head> liệu website tạo ra như
tên tài liệu, tên tác giả,
mô tả, khai báo CSS,
khai báo Javascript
 Khai báo bảng mã kí
4 <meta charset="UTF-8">
tự sử dụng
 Khai báo chiều rộng
<meta name="viewport" content="width=device- bằng chiều rộng của
5
width, initial-scale=1.0"> thiết bị , độ phóng to
ban đầu 100%
 Tiêu đề cho trang
6 <title>Document</title>
web
7 </head>  Kết thúc thẻ head
8 <body>  Kết thúc thẻ body
Bảng 3.9 : Cấu trúc chung của một file HTML
- Trong đó phần body sẽ quyết định tất cả những gì xuất hiện trên màn hình , phần head
dùng để load các file JS và CSS
STT Dòng lệnh Chú thích
 Hướng đường dẫn tới
<link rel="stylesheet" href="{{url_for('static',filename
1 file CSS trong thư
='css/main.css')}}">
mục static của flask
    <link rel="stylesheet" href="https://cdnjs.cloudflare.
2 com/ajax/libs/font-awesome/4.7.0/css/font- Load file từ CDN
awesome.min.css">
3     <script src="https://ajax.googleapis.com/ajax/libs/jqu  Load file từ CDN

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 44


Ứng dụng IoT điều khiển Robot

STT Dòng lệnh Chú thích


ery/3.5.1/jquery.min.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/socket.i
o/2.2.0/socket.io.js" integrity="sha256-
4  Load file từ CDN
yr4fRk/GU1ehYJPAs8P4JlTgu0Hdsp4ZKrx8bDEDC3
I=" crossorigin="anonymous"></script>
Bảng 3.10 : Nạp các file cần thiết cho việc sử dụng Socket phía Server
3.3. Xây dựng chương trình mô phỏng việc điều khiển Robot :
- Trong phạm vi đề tài , nhóm em thiết kế phần giao tiếp để điều khiển robot bằng việc
sử dụng Arduino Uno . Việc ra lệnh điều khiển từ Raspberry được truyền qua Arduino
thông qua UART
3.3.1. Giới thiệu sơ bộ về UART :
- UART có tên đầy đủ là Universal Asynchronous Receiver – Transmitter. Nó là một
mạch tích hợp được sử dụng trong việc truyền dẫn dữ liệu nối tiếp giữa máy tính và các
thiết bị ngoại vi.
- UART có chức năng chính là truyền dữ liệu nối tiếp. Trong UART, giao tiếp giữa hai
thiết bị có thể được thực hiện theo hai phương thức là giao tiếp dữ liệu nối tiếp và giao
tiếp dữ liệu song song.

Hình 3.5 : Mô hình truyền thông nối tiếp UART


- Giao tiếp dữ liệu nối tiếp có nghĩa là dữ liệu có thể được truyền qua một cáp hoặc một
đường dây ở dạng bit-bit và nó chỉ cần hai cáp. Nó yêu cầu số lượng  mạch hay như dây
rất ít. Giao tiếp này rất hữu ích trong các mạch ghép hơn giao tiếp song song.
Giao tiếp dữ liệu song song có nghĩa là dữ liệu có thể được truyền qua nhiều cáp cùng
một lúc. Truyền dữ liệu song song yêu số lượng mạch và dây nhiều.

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 45


Ứng dụng IoT điều khiển Robot

- Trong dự án chúng em chọn phương pháp truyền dữ liệu nối tiếp vì lượng dữ liệu
truyền đi không nhiều

Hình 3.6 : Cấu trúc của việc truyền dữ liệu


- Trong giao tiếp UART có các thông số chính:
 Baud rate (tốc độ baud ): Khoảng thời gian để 1 bit được truyền đi. Phải được cài
đặt giống nhau ở cả phần gửi và nhận
 Frame (khung truyền): Khung truyền quy định về mỗi lần truyền bao nhiêu bit
 Start bit: là bit đầu tiên được truyền trong 1 Frame. Báo hiệu cho thiết bị nhận có
một gói dữ liệu sắp đc truyền đến. Đây là bit bắt buộc
 Data: dữ liệu cần truyền. Bit có trọng số nhỏ nhất LSB được truyền trước sau đó
đến bit MSB.
 Parity bit: kiểm tra dữ liệu truyền có đúng không
 Stop bit : là 1 hoặc các bit báo cho thiết bị rằng các bit đã được gửi xong. Thiết bị
nhận sẽ tiến hành kiểm tra khung truyền nhằm đảm bảo tính đúng đắn của dữ liệu.
Đây là bit bắt buộc

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 46


Ứng dụng IoT điều khiển Robot

- Trong dự án , nhóm em chọn các thông số mặc định của UART cho cả Arduino và
Raspberry, ngoại trừ việc khai báo baud rate là 9600 , còn lại là 8 bit trên 1 frame , No
parity và 1 bit stop
3.3.2. Lập trình truyền thông nối tiếp giữa Raspberry và Arduino:
- Lập trình Arduino

STT Dòng lệnh Chú thích


1 float temp;
2 int dung = 7;
3 int lui = 6;
4 int vuong = 5;
5 int fromPi = 0;
6 int cambien = 4; Khởi tạo các biến và các chân đầu
7 void setup(){ vào đầu ra cho Arduino và tốc độ
8 Serial.begin(9600); baud = 9600
9 pinMode(dung,OUTPUT);
10 pinMode(lui,OUTPUT);
11 pinMode(vuong,OUTPUT);
12 pinMode(cambien,INPUT_PULLUP);
13 }
14 void loop(){ Khởi tạo vòng lặp chương trình
15 int reading = analogRead(A0); Đọc giá trị nhiệt độ từ cảm biến và
16 float voltage = reading * 5.0 / 1024.0; tính toán để ra giá trị nhiệt độ
17 float temp = voltage*100; chuẩn
18 if (digitalRead(cambien)==0){
Serial.println(String(temp) Nếu mà cảm biến khoảng cách
19
+”|”+String(1)); được kích hoạt thì sẽ gửi dữ liệu
20 }
tới Raspberry trong đó có chứa dữ
21 else{
22 Serial.println(String(temp)+”|”+String(0)); liệu nhiệt độ và trị số khoảng cách
23 }
24 delay(1000);
Delay để bắt đầu chu trình mới
25 }
Bảng 3.11: Lập trình UART cho Arduino
- Lập trình Raspberry :
STT Dòng lệnh Chú thích
Nhập vào thư viện để
1 import serial
giao tiếp UART

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 47


Ứng dụng IoT điều khiển Robot

Chọn Port để giao tiếp


(chính là port cắm
2 ser = serial.Serial('/dev/ttyACM0',9600)
ARDUINO) và khai báo
tốc độ baud
Nếu có dữ liệu gửi từ
3 if(ser.in_waiting>0):
Arduino
4             line = ser.readline() Đọc dòng dữ liệu đó
5             temp = line.split('|')[0] Tách dữ liệu nhận được
6             dis  = line.split('|')[1] thành 2 phần khác nhau
Lưu giá trị nhiệt độ lại
7     dulieudualen['Nhietdo'] = temp để dùng cho việc giám
sát trên web
Nếu không phát hiện ra
8     if id==-1:
vật thể nào khác
Thì tên đối tượng đưa
9         dulieudualen['tendoituong'] = 'ĐƯỜNG DÂY' lên mạng sẽ là Đường
dây
10     else: Ngược lại
Tên đối tượng được gán
bằng đối tượng mà
11         dulieudualen['tendoituong'] = classname[id]
Raspberry nhận biết
được
Nếu đối tượng là chuỗi
12         if classname[id]=='chuoisuneo':
sứ néo
13 gpio.output(dung,1) Bật đèn báo hiệu cho
14 gpio.output(lui,0)
15 gpio.output(vuong,0) việc DỪNG
Nếu đối tượng là chuỗi
16         if classname[id]=='chuoisudung':
sứ đứng
17             dulieudualen['cambien'] = dis Lưu giá trị khoảng cách
18             if dis == 1:
19 gpio.output(dung,0) Bật đèn báo hiệu cho
20 gpio.output(lui,1)
21 gpio.output(vuong,0) việc LÙI
Ngược lại nếu khoảng
22             else:
cách bằng 0
23 gpio.output(dung,0) Bật đèn báo hiệu cho

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 48


Ứng dụng IoT điều khiển Robot

24 gpio.output(lui,0)
việc VƯƠNG
25 gpio.output(vuong,1)

Bảng 3.12: Lập trình UART cho Raspberry

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 49


Ứng dụng IoT điều khiển Robot

CHƯƠNG 4: HOÀN THIỆN HỆ THỐNG

4.1. Kết quả:


- Hệ thống chạy ổn định , nhận biết được các vật thể và chỉ ra hành động của robot
tương ứng
- Cách sử dụng : đăng nhập vào địa chỉ ip được phân bổ cho Raspberry ở port 5000.
Kiểm tra vật thể bằng cách giơ lên những tấm ảnh tương ứng với vật thể

Hình 4.1: Nhận diện Khung định vị

Hình 4.2 : Nhận diện Chuỗi sứ néo

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 50


Ứng dụng IoT điều khiển Robot

Hình 4.3 : Nhận diện Chuỗi sứ đứng nếu robot cách xa chuỗi đứng

Hình 4.4 : Nhận diện Chuỗi sứ đứng nếu robot đứng gần chuỗi đứng

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 51


Ứng dụng IoT điều khiển Robot

Hình 4.5: Hình ảnh hoàn chỉnh của khối xử lí trung tâm
4.2. Nhận xét :
- Hệ thống chạy ổn định , nhận diện tốt vật thể và chỉ ra rõ khoảng cách . Tui vậy , khả
nẵng nhận diện vật thể chỉ ở một khoảng cách nhất định , và khả năng truyền hình ảnh
còn bị delay quá nhiều . Nguyên nhân là do cấu hình của phiên bản máy tính Nhúng hiện
tại còn khá thấp . Trong tương lai nếu tiếp tục làm dự án thì nhóm sẽ cải thiện về việc lập
trình và cấu hình của Raspberry

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 52


Ứng dụng IoT điều khiển Robot

KẾT LUẬN

Sau thời gian tìm tòi , học hỏi và nghiên cứu ,vận dụng hết các kiến thức chuyên nghành
đã được học như : Thiết kế , xây dựng hệ thông Scada , hệ thống thời gian thực ,… từ đó
nhóm đã thực hiện triển khai đề tài “Ứng dụng IoT điều khiển Robot ” , nhóm đã hoàn
thành mục tiêu đưa ra và đạt được các kết quả như sau :
 Chế tạo thành công mô hình và hệ thống điều khiển cho robot
 Xây dựng thành công hệ thống truyền nhận dữ liệu không dây giữa người giám sát
với bộ xử lí và giữa bộ xử lí với hệ thống giám sát
 Xây dựng thành công các chương trình giám sát, quản lý và lưu trữ thông tin trạng
thái của robot khi robot đi vào hoạt động.

Việc thiết kế, chế tạo và kết nối thành công các module trong mô hình thực nghiệm đã
được thể hiện bằng việc bộ xử lí đã có thể nhận diện và đưa ra hành động tiếp theo của
robot chính xác
Các kết quả đạt được đã giải quyết được những vấn đề sau:
 Mô hình thực nghiệm là sự tổng hợp của việc phân tích, xây dựng hệ thống mạng
truyền thông, tính toán. Đến tổng hợp và ứng dụng bộ điều khiển, qua đó giúp ta có cái
nhìn tổng quan, sinh động trong việc thiết kế, chế tạo một hệ thống điều khiển tự động.
Thấy được vai trò của các nội dung lý thuyết trong thực tế.
 Thành công của đề tài đã đem lại cơ sở và tạo tiền đề cho việc nghiên cứu, chế tạo
các thiết bị điều khiển không dây khác.

Tuy nhiên, đề tài vẫn còn một số nhược điểm như:


 Khả năng truyền tải video còn khá delay nguyên nhân do cấu hình máy tính nhúng
Raspberry chưa đủ mạnh , có thể nâng cấp bằng cách sử dụng phiên bản tốt hơn
 Khả năng nhận diện vật thể còn giới hạn , chỉ giữ trong một khoảng cách nhất định ,
vì khả năng xử lí của raspberry còn hạn chế , có thể nâng cấp bằng cách sử dụng
raspberry phiên bản tốt hơn , và tăng số lượng ảnh của vật thể lên để training cho bộ xử
lí . Về sau có thể xây dựng nên hệ thống hoàn chỉnh nhất bằng công nghệ CNNs
(Convolutional Neural Networks)

TÀI LIỆU THAM KHẢO

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 53


Ứng dụng IoT điều khiển Robot

3 Tài liệu trong nước:


[1] Hoàng Minh Sơn (2006). Mạng truyền thông công nghiệp. Nhà xuất bản khoa học
và kỹ thuật, Hà Nội.
[2] Võ Duy Tuấn. Python cơ bản
[3] Nguyễn Hoàng Hải, Nguyễn Việt Anh (2009). Lập trình Matlab và ứng dụng.
Nhà xuất bản khoa học và kỹ thuật Hà Nội.
3 Tài liệu nước ngoài
[1] Richard Blum Christine Bresnahan. Python Programming for Raspberry Pi in 24
Hours
[2] Wolfram Donat. Learn Raspberry Pi Programming with Python
[3] Rafael C. GONZALES, Digital image processing
7 Tài liệu Website:
[1] http://www.arduino.cc/
[2] https://github.com/
[3] https://www.raspberrypi.org/
[4] http://www.geekmomprojects.com/
[5] http://www.open-electronics.org/
[6] https://www.w3schools.com/
[7] https://opencv-python-tutroals.readthedocs.io/

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 54


Ứng dụng IoT điều khiển Robot

PHỤ LỤC A
(Code WebServer)

from flask import Flask,render_template,Response


import cv2
import numpy as np
import os
from flask_socketio import SocketIO,emit
import json
import time
from threading import Thread
import RPi.GPIO as gpio
dung = 5
lui = 6
vuong = 13
gpio.setwarnings(False)
gpio.setmode(gpio.BCM)
gpio.cleanup()
gpio.setup(dung,gpio.OUT)
gpio.setup(lui,gpio.OUT)
gpio.setup(vuong,gpio.OUT)
import serial
ser = serial.Serial('/dev/ttyACM0',9600)
dulieu = '''
{
"tendoituong":"Chưa nhận biết",
"Nhietdo":30,
"cambien":0
}
'''
class Videoget:
def __init__(self,src=0):

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 55


Ứng dụng IoT điều khiển Robot

self.stream = cv2.VideoCapture(src)
(self.grabbed,self.frame) = self.stream.read()
self.stopped = False
def start(self):
Thread(target=self.get,args=()).start()
return self
def get(self):
while not self.stopped:
if not self.grabbed:
self.stop()
else:
(self.grabbed,self.frame) = self.stream.read()
def stop(self):
self.stopped = True
class Videoshow:
def __init__(self, frame=None, thres=40, desList=None,classname=None):
self.imgGray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
(self.kp2, self.des2) = orb.detectAndCompute(self.imgGray, None)
self.bf = cv2.BFMatcher()
self.matchList = []
self.finalVal = -1
self.thres = thres
self.frame = frame
self.stopped = False
self.desList = desList
self.classNames=classname
def start(self):
Thread(target=self.show,args=()).start()
return self
def show(self):
while not self.stopped:
try:
for self.des in self.desList:

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 56


Ứng dụng IoT điều khiển Robot

self.matches = self.bf.knnMatch(self.des, self.des2, k=2)


self.good = []
for self.m, self.n in self.matches:
if self.m.distance < 0.75 * self.n.distance:
self.good.append([self.m])
self.matchList.append(len(self.good))
except:
pass
print(self.matchList)
if len(self.matchList) != 0:
if max(self.matchList) > self.thres:
self.finalVal = self.matchList.index(max(self.matchList))
else:self.finalVal = -1
else: self.finalVal = -1
self.matchList = []
def find(self):
return self.finalVal
def stop(self):
self.stopped = True
path = r'C:\Users\OS\Desktop\Flaskproject\static\queryPictures1'
images = []
classname = []
myList = os.listdir(path)
orb = cv2.ORB_create(nfeatures=1000)
for cl in myList:
imgCur = cv2.imread(f'{path}/{cl}',0)
images.append(imgCur)
classname.append(os.path.splitext(cl)[0])
def findDes(images):
desList = []
for img in images:
kp,des = orb.detectAndCompute(img,None)
desList.append(des)

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 57


Ứng dụng IoT điều khiển Robot

return desList
desList = findDes(images)
print(classname)
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
app.debug =False
app.threaded = True
socketio =
SocketIO(app,async_mode='threading',cors_allowed_origins="*",engineio_logger=True,l
ogger=True)
id = -1
def gen_frames(src=0):
video_getter = Videoget(src).start()
video_shower = Videoshow(video_getter.frame, 40, desList,classname).start()
while 1:
if video_getter.stopped or video_shower.stopped:
video_shower.stop()
video_getter.stop()
video_getter.stream.release()
cv2.destroyAllWindows()
break
video_shower.frame = video_getter.frame
global id
id = video_shower.find()
video_shower.imgGray = cv2.cvtColor(video_getter.frame,
cv2.COLOR_BGR2GRAY)
(video_shower.kp2, video_shower.des2) =
orb.detectAndCompute(video_shower.imgGray, None)
video_shower.bf = cv2.BFMatcher()
if not video_getter.grabbed:
break
else:
ret,buffer = cv2.imencode('.jpg',video_shower.frame)

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 58


Ứng dụng IoT điều khiển Robot

frame = buffer.tobytes()
yield(b'--frame\r\n'
b'Content-Type:image/jpeg\r\n\r\n'+frame+b'\r\n')
@app.route('/')
def index():
return render_template('index.html')
@app.route('/video_feed')
def video_feed():
return Response(gen_frames(),mimetype='multipart/x-mixed-replace;boundary=frame')
@socketio.on('guidi')
def handle_request(data):
dulieudualen = json.loads(dulieu)
if(ser.in_waiting>0):
line = ser.readline()
temp = line.split('|')[0]
dis = line.split('|')[1]
dulieudualen['Nhietdo'] = temp
if id==-1:
dulieudualen['tendoituong'] = 'ĐƯỜNG DÂY'
else:
dulieudualen['tendoituong'] = classname[id]
if classname[id]=='chuoisuneo':
gpio.output(dung,1)
gpio.output(lui,0)
gpio.output(vuong,0)
if classname[id]=='chuoisudung':
dulieudualen['cambien'] = dis
if dis == 1:
gpio.output(dung,0)
gpio.output(lui,1)
gpio.output(vuong,0)
else:
gpio.output(dung,0)

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 59


Ứng dụng IoT điều khiển Robot

gpio.output(lui,0)
gpio.output(vuong,1)
)
print('on guidi-')
socketio.emit('mess_from_server',json.dumps(dulieudualen))

if __name__ == '__main__':
socketio.run(app)

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 60


Ứng dụng IoT điều khiển Robot

PHỤ LỤC B
(Code giao diện)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>DATN</title>
<link rel="shortcut icon" type="image/x-icon"
href="{{url_for('static',filename='Pictures/bachkhoa.ico')}}">
<link rel="stylesheet" href="{{url_for('static',filename='css/main.css')}}">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-
awesome/4.7.0/css/font-awesome.min.css">
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js"
integrity="sha256-yr4fRk/GU1ehYJPAs8P4JlTgu0Hdsp4ZKrx8bDEDC3I="
crossorigin="anonymous"></script>
<script defer>
var socket = io.connect('http://127.0.0.1:5000');
i = 0;
socket.on('connect', function() {
console.log('socket connected');
})
socket.emit('guidi',i);
console.log('abc');
setInterval(function(){

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 61


Ứng dụng IoT điều khiển Robot

console.log('interval');
socket.emit('guidi',i);
}
,1000);
socket.on('mess_from_server',(msg)=>{
if (JSON.parse(msg)["tendoituong"]=="chuoisuneo"){
$('.object').html('CHUỖI SỨ NÉO');
$('.objecthanhdong').html('DỪNG LẠI');
}
else if (JSON.parse(msg)["tendoituong"]=="khungdinhvi"){
$('.object').html('KHUNG ĐỊNH VỊ');
$('.objecthanhdong').html('CHẠY QUA');
}
else if (JSON.parse(msg)["tendoituong"]=="chuoisudung"){
$('.object').html('CHUỖI SỨ ĐỨNG');
if (JSON.parse(msg)["cambien"]==0){
$('.objecthanhdong').html('VƯƠNG BƯỚC');
}
else{
$('.objecthanhdong').html('LÙI BƯỚC');
}
}
else {$('.object').html(JSON.parse(msg)["tendoituong"]);
$('.objecthanhdong').html('ĐI TIẾP');
}
if (JSON.parse(msg)["Nhietdo"]>40){
$('.objecttemp').html('Cảnh báo nhiệt độ');}

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 62


Ứng dụng IoT điều khiển Robot

else {$('.objecttemp').html(JSON.parse(msg)["Nhietdo"]);}
})
</script>
</head>
<body>
<div class="container">
<img src="{{url_for('static',filename='Pictures/daihocbachkhoa.jpg')}}"
class="anh1">
<img src="{{url_for('static',filename='Pictures/logo khoadien.png')}}"
class="anh2">
<!-- <div class="thongtin1" style="color:rgb(39, 105, 67);">
ĐẠI HỌC ĐÀ NẴNG<br>
TRƯỜNG ĐẠI HỌC BÁCH KHOA<br>
KHOA ĐIỆN </div> -->
<div class="thongtin2" style="color:rgb(39, 105, 67);">
<div class="thongtin21">ĐỒ ÁN TỐT NGHIỆP NĂM 2020</div>
<div class='thongtin212'>
<div class="thongtin22">
ĐỀ TÀI<br>
SVTH<br>
GVHD
</div>
<div class="thongtin23">
:<br>:<br>:
</div>
<div class="thongtin24">
<em>ỨNG DỤNG IOT ĐIỀU KHIỂN ROBOT</em><br>
TRƯƠNG ĐÌNH THÀNH NGUYÊN - TRẦN TUẤN THÀNH<br>

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 63


Ứng dụng IoT điều khiển Robot

TS.NGUYỄN HOÀNG MAI


</div>
</div>
</div>
<div class="maunen"></div>
<div class='daihocbk'>TRƯỜNG ĐẠI HỌC BÁCH KHOA</div>
<div class='khoadien'>KHOA ĐIỆN</div>
</div>
<div class="stream-section">
<img src="{{ url_for('video_feed')}}" alt="day la video">
</div>
<div class="tenthongtintruyvan">BẢNG GIÁM SÁT</div>
<div class='cachsudung'>Cách sử dụng</div>
<div class='bangcachsudung'><p>Bằng cách theo dõi những thông số trên bảng giám
sát , người dùng
có thể biết được chính xác vị trí và hành động tiếp theo của robot , đồng thời thông
số nhiệt độ
cũng được tích hợp để tiện theo dõi</p>
</div>
<div class='truyvan'>
<div class="vatthe">
<p class="subject" style="left:20px;">VẬT THỂ:</p>
<p class="object">aaaa</p>
</div>
<div class='nhietdo'>
<p class="subjecttemp">NHIỆT ĐỘ:</p>
<p class="objecttemp">NONE</p>
</div>

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 64


Ứng dụng IoT điều khiển Robot

<div class='hanhdong'>
<p class="subjecthanhdong">HÀNH ĐỘNG:</p>
<p class="objecthanhdong">None</p>
</div>
</div>
<div class="footer">
<div class='footer-left'>
<h3>ĐỒ ÁN TỐT NGHIỆP</h3>
<!-- <div class='footer-links'>
<a href="#" class="link1">HOME</a>
<a href="#">HELP</a>
<a href="#">ABOUT</a>
<a href="#">CONTACT</a>
</div> -->
<p class="footer-copyright">
Copyright&copy; 2020 Thành Nguyên - Tuấn Thành
</p>
</div>
<div class="footer-center">
<div>
<i class='fa fa-map-marker'></i>
<p>Hòa Khánh Bắc, Quận Liên Chiểu , Đà Nẵng</p>
</div>
</div>
<div class='social'>
<div class='footer-social'>
<a href='#'><i class='fa fa-facebook'></i></a>

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 65


Ứng dụng IoT điều khiển Robot

<a href='#'><i class='fa fa-twitter'></i></a>


<a href='#'><i class='fa fa-linkedin'></i></a>
<a href='#'><i class='fa fa-github'></i></a>
</div>
</div>
</div>
</body>
</html>

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 66


Ứng dụng IoT điều khiển Robot

PHỤ LỤC C
(Code Arduino)

float temp;
int dung = 7;
int cambien = 4;
char inputstring;
void setup(){
Serial.begin(9600);
pinMode(cambien,INPUT_PULLUP);
}
void loop(){
int reading = analogRead(A0);
float voltage = reading * 5.0 / 1024.0;
float temp = voltage*100.0;
if (digitalRead(cambien)==0){
Serial.println(String(temp)+String("|")+String(1));
}
else{
Serial.println(String(temp)+String("|")+String(0));
}
delay(1000);
}

SVTH : Trương Đình Thành Nguyên HD :TS.Nguyễn Hoàng Mai 67

You might also like