You are on page 1of 46

Thiết kế xe tự hành di động bám tường

MỤC LỤC
DANH MỤC HÌNH VẼ ........................................................................................................... 2
DANH MỤC BẢNG BIỂU ...................................................................................................... 4
DANH MỤC TỪ VIẾT TẮT .................................................................................................. 5
LỜI NÓI ĐẦU .......................................................................................................................... 6
CHƯƠNG 1: TỔNG QUAN ................................................................................................. 7
1.1. Giới thiệu về xe tự hành [1] ..................................................................................... 7
1.2. Tổng quan về Arduino ............................................................................................. 8
1.2.1. Giới thiệu chung [2] ......................................................................................... 8
1.2.2. Ứng dụng [5] .................................................................................................... 9
CHƯƠNG 2: THIẾT KẾ PHẦN CỨNG CHO XE TỰ HÀNH ...................................... 11
2.1. Cấu tạo xe tự hành ................................................................................................. 11
2.1.1. Khối điều khiển .............................................................................................. 13
2.1.2. Khối động cơ .................................................................................................. 15
2.1.3. Khối cảm biến ................................................................................................ 18
2.1.4. Khối nguồn ..................................................................................................... 20
2.2. Thiết kế mạch điều khiển xe tự hành [8] ............................................................... 21
2.2.1. Khối xử lí trung tâm ....................................................................................... 23
2.2.2. Khối nguồn ..................................................................................................... 23
2.2.3. Mạch sạc pin .................................................................................................. 25
2.2.4. Hệ thống các Jump kết nối ............................................................................. 26
2.2.5. Mô hình sản phầm .......................................................................................... 27
CHƯƠNG 3: THIẾT KẾ PHẦN MỀM CHO XE TỰ HÀNH ........................................ 28
3.1. Lập trình cho xe tự hành ........................................................................................ 28
3.1.1. Phần mềm Arduino IDE [5] ........................................................................... 28
3.1.2. Lập trình cho ATmega328P [8]...................................................................... 29
3.2. Xây dựng thuật toán cho xe tự hành ...................................................................... 29
3.2.1. Bộ điều khiển PID [16]................................................................................... 29
3.2.2. Xây dựng thuật toán ....................................................................................... 33
CHƯƠNG 4: KẾT QUẢ THỰC NGHIỆM ...................................................................... 41
KẾT LUẬN ............................................................................................................................. 44
TÀI LIỆU THAM KHẢO ..................................................................................................... 45

Đồ Án I 1
Thiết kế xe tự hành di động bám tường

DANH MỤC HÌNH VẼ


Hình 1.1. Xe tự hành thám hiểm Sao Hỏa Curiosity. ................................................................ 7

Hình 1.2. Các dòng Arduino. [3]................................................................................................ 8

Hình 1.3. Robot di động tự tránh vật cản dùng camera CMUCam và Arduino Nano. ............ 10

Hình 2.1. Mô hình xe tự hành. ................................................................................................. 11

Hình 2.2. Hình ảnh thực tế của xe. .......................................................................................... 12

Hình 2.3. Sơ đồ khối cấu tạo của xe tự hành. .......................................................................... 12

Hình 2.4. Arduino Pro Mini. .................................................................................................... 13

Hình 2.5. Chip ATmega328P-AU. .......................................................................................... 14

Hình 2.6. Độ rộng xung ứng với các giá trị Duty Cycle. ......................................................... 15

Hình 2.7. Góc quay của Servo ứng với độ rộng xung. ............................................................ 16

Hình 2.8. Động cơ Servo DS04-NFC cùng phụ kiện............................................................... 16

Hình 2.9. Code điều khiển động cơ Servo DS04-NFC. ........................................................... 17

Hình 2.10. Cảm biến siêu âm HC-SRF04. ............................................................................... 18

Hình 2.11. Nguyên lý hoạt động của cảm biến. [8] ................................................................. 18

Hình 2.12. Biểu đồ thời gian của cảm biến. [11] ..................................................................... 19

Hình 2.13. Những trường hợp cảm biến không đo được khoảng cách. [12] ........................... 19

Hình 2.14. Code điều khiển cảm biến siêu âm HC-SRF04. .................................................... 20

Hình 2.15. Pin sa ̣c 7.4v Lithium Li-Ion ICR18650-2600mAh. ............................................... 21

Hình 2.16. Sơ đồ nguyên lý mạch điều khiển xe tự hành. ....................................................... 22

Hình 2.17. Sơ đồ nguyên lý khối xử lí trung tâm. ................................................................... 23

Hình 2.18. IC AMS1117-5V.................................................................................................... 24

Hình 2.19. Sơ đồ nguyên lý khối nguồn .................................................................................. 24

Hình 2.20. IC TP4056. ............................................................................................................. 25

Hình 2.21. Sơ đồ nguyên lý mạch sạc pin. .............................................................................. 26

Đồ Án I 2
Thiết kế xe tự hành di động bám tường

Hình 2.22. Hệ thống các Jump kết nối. .................................................................................... 26

Hình 2.23. PCB mô phỏng mạch điều khiển động cơ.............................................................. 27

Hình 3.1. Giao diện Arduino IDE. ........................................................................................... 28

Hình 3.2. Sơ đồ khối của bộ điều khiển PID. .......................................................................... 30

Hình 3.3. Đồ thị tín hiệu ra theo thời gian, ba giá trị KP (KI và KD là hằng số). ..................... 31

Hình 3.4. Đồ thị tín hiệu ra theo thời gian, tương ứng với 3 giá trị KI (KP và KD không đổi).32

Hình 3.5. Đồ thị tín hiệu ra theo thời gian, với 3 giá trị KD (KP and KI không đổi). ............... 33

Hình 3.6. Lưu đồ thuật toán điều khiển xe tự hành. ................................................................ 35

Hình 3.7. Khi xe gặp vật cản phía trước. ................................................................................. 36

Hình 3.8. Khi khoảng cách bên phải xe lớn hơn 25 cm. .......................................................... 37

Hình 3.9. Góc quay cần được điều chỉnh cho phù hợp. ........................................................... 38

Hình 3.10. Khi khoảng cách bên phải xe nhỏ hơn 25 cm. ....................................................... 39

Hình 3.11. Khi khoảng cách phía trước và bên phải xe đều lớn. ............................................. 40

Hình 3.12. Khi có vật cản nằm chếch với hướng di chuyển của xe góc 450. .......................... 40

Hình 4.1. Trường hợp phía trước không có vật cản, bên phải cách tường 25 cm. .................. 41

Hình 4.2. Trường hợp khoảng cách bên phải xe lớn hơn 25 cm.............................................. 41

Hình 4.3. Góc quay của xe được điều chỉnh hợp lý. ................................................................ 42

Hình 4.4. Trường hợp khoảng cách bên phải xe nhỏ hơn 25 cm. ............................................ 42

Hình 4.5. Trường hợp phía trước có vật cản. ........................................................................... 42

Hình 4.6. Trương hợp xảy ra sự cố. ......................................................................................... 43

Đồ Án I 3
Thiết kế xe tự hành di động bám tường

DANH MỤC BẢNG BIỂU


Bảng 1.1. Phân loại bo mạch Arduino. [4] ................................................................................. 9

Bảng 2.1. Thông số kỹ thuật Arduino Pro Mini. ..................................................................... 13

Bảng 2.2. Thông số kỹ thuật chip ATmega328P-AU. ............................................................. 14

Bảng 2.3. Thông số kỹ thuật động cơ Servo DS04-NFC. ........................................................ 17

Bảng 2.4. Thông số kỹ thuật cảm biến siêu âm HC-SRF04. [11]............................................ 20

Bảng 2.5. Thông số kỹ thuật pin sa ̣c 7.4v Lithium Li-Ion ICR18650-2600mAh. [13] ........... 21

Bảng 2.6. Thông số kỹ thuật IC AMS1117-5V. [14]............................................................... 24

Bảng 2.7. Thông số kỹ thuật IC TP4056. [15] ......................................................................... 25

Bảng 3.1. Cách nối dây nạp bootloader cho ATmega328P. .................................................... 29

Đồ Án I 4
Thiết kế xe tự hành di động bám tường

DANH MỤC TỪ VIẾT TẮT


I/O Input/Output Cổng vào/ra

PID Proportional Integral Derivative Bộ điều khiển vi tích phân tỷ lệ

USB Universal Serial Bus Chuẩn kết nối tuần tự đa dụng

IDE Integrated Development Environment Môi trường phát triển tích hợp

LED Light Emitting Diode Điốt phát quang

PWM Pulse Width Modulation Điều chế độ rộng xung

RISC Reduced Instructions Set Computer Máy tính với tập lệnh đơn giản hóa

ISP In-System Programmer Nạp chương trình trong hệ thống

EEPROM Electrically Erasable Programmable Bộ nhớ chỉ đọc tái lập trình bằng tín
Read-Only Memory hiệu điện

RAM Random Access Memory Bộ nhớ truy cập ngẫu nhiên

SRAM Static Random Access Memory Bộ nhớ truy cập ngẫu nhiên tĩnh

UART Universal Asychronous serial Giao thức truyền nhận nối tiếp không
Receiver and Transmitter đồng bộ

SPI Serial Peripheral Interface Giao diện ngoại vi nối tiếp

I2C Inter-Integrated Circuit Giao tiếp truyền thông 2 dây

ADC Analog-to-Digital Converter Bộ chuyển đổi tuơng tự-số

DAC Digital-to-Analog Converter Bộ chuyển đổi số-tuơng tự

IC Integrated Circuit Mach tich hop.

LCD Liquid Crystal Display Màn hình tinh thể lỏng

Đồ Án I 5
Thiết kế xe tự hành di động bám tường

LỜI NÓI ĐẦU


Trong thời đại công nghiệp ngày nay, robot ngày càng được sử dụng phổ biến trong sản xuất
cũng như trong cuộc sống của con người. Robot đã có một vị trí quan trọng khó có thể thay thế
được, nó giúp con người để làm việc trong các điều kiện nguy hiểm, khó khăn. Ngoài ra, robot
còn được dùng vào các lĩnh vực thám hiểm không gian, quân sự, giải trí... Lĩnh vực robot di
động đang ngày càng chiếm được sự quan tâm của các nhà nghiên cứu và xã hội. Chính vì lí
do này, em đã lựa chọn đề tài “Thiết kế xe tự hành di động bám tường” cho học phần Đồ
Án I.

Trong học kỳ vừa qua, dưới sự chỉ dẫn của thầy TS. Nguyễn Hoàng Nam và các anh Bùi
Tuấn Anh và anh Phạm Tùng Lâm thuộc Nhóm nghiên cứu của thầy, em đã học hỏi được nhiều
kiến thức bổ ích về xe tự hành để có thể hoàn thiện được Đồ Án này. Trong bài báo cáo của
mình, em xin trình bày những nội dung sau:

- Chương 1: Tổng quan.


- Chương 2: Thiết kế phần cứng xe cho tự hành.
- Chương 3: Thiết kế phần mềm cho xe tự hành.
- Chương 4: Kết quả thực nghiệm.
- Chương 5: Kết luận.

Em xin chân thành cảm ơn!

Sinh viên

Lê Duy Anh

Đồ Án I 6
Thiết kế xe tự hành di động bám tường

CHƯƠNG 1: TỔNG QUAN


1.1. Giới thiệu về xe tự hành [1]
Xe tự hành là một loại xe robot có khả năng tự dịch chuyển, tự vận động (có thể lập trình
lại được) dưới sự điều khiển tự động có khả năng hoàn thành công việc được giao. Xe tự hành
là một thành phần có vai trò quan trọng trong ngành robot học. Cùng với sự phát triển mạnh
mẽ của các hệ thống tự động hóa, xe tự hành ngày một được hoàn thiện và càng cho thấy lợi
ích của nó trong công nghiệp và sinh hoạt. Ngày nay xe tự hành có rất nhiều ứng dụng tự động
hóa trong đời sống, công nghiệp….Có nhiều công việc đòi hỏi thực thi trong môi trường độc
hại, nguy hiểm như có phóng xạ, khí độc, bụi bẩn, kí sinh trùng gây bệnh. Vì thế giải pháp sử
dụng robot nói chung trong việc quan trắc môi trường là rất cần thiết. Với khả năng tích hợp
nhiều loại cảm biến như nhiệt độ, độ ẩm, bụi, camera, siêu âm, hồng ngoại…, robot có khả
năng thay thế con người 1 cách hiệu quả trong các công việc có độ nguy hiểm cao.

Hình 1.1. Xe tự hành thám hiểm Sao Hỏa Curiosity.

Từ tình hình thực tế đó, việc xây dựng các chương trình hoạt động cho các xe tự hành là
điều thiết yếu. Một vấn đề rất được quan tâm khi thiết kế xe tự hành là điều khiển làm sao cho
xe có thể đi theo một quỹ đạo mong muốn. Bài toán xe tự hành di động bám tường (wall-
following problem) là một trong các bài toán thường gặp của robot kiểu phản xạ (reactive
paradigm), nó đã được giải bằng nhiều cách khác nhau. Bản báo cáo này trình bày phương
pháp giải quyết vấn đề đó với thuật toán điều khiển PID sử dụng Arduino.

Đồ Án I 7
Thiết kế xe tự hành di động bám tường

1.2. Tổng quan về Arduino


1.2.1. Giới thiệu chung [2]

Hình 1.2. Các dòng Arduino. [3]

Arduino là một board mạch vi xử lý, nhằm xây dựng các ứng dụng tương tác với nhau hoặc
với môi trường được thuận lợi hơn. Phần cứng bao gồm một board mạch nguồn mở được thiết
kế trên nền tảng vi xử lý AVR Atmel 8bit, hoặc ARM Atmel 32-bit. Những Model hiện tại
được trang bị gồm 1 cổng giao tiếp USB, 6 chân đầu vào analog, 14 chân I/O kỹ thuật số tương
thích với nhiều board mở rộng khác nhau.

Arduino ra đời tại thị trấn Ivrea thuộc nước Ý và được đặt theo tên một vị vua vào thế kỷ
thứ 9 là King Arduin. Arduino chính thức được đưa ra giới thiệu vào năm 2005 như là một
công cụ khiêm tốn dành cho các sinh viên của Massimo Banzi, là một trong những người phát
triển Arduino, tại trường Interaction Design Instistute Ivrea (IDII). Mặc dù hầu như không được
tiếp thị gì cả, tin tức về Arduino vẫn lan truyền với tốc độ chóng mặt nhờ những lời truyền
miệng tốt đẹp của những người dùng đầu tiên.

Những nhà thiết kế của Arduino cố gắng mang đến một phương thức dễ dàng, không tốn
kém cho những người yêu thích, sinh viên và giới chuyên nghiệp để tạo ra những thiết bị có
khả năng tương tác với môi trường thông qua các cảm biến và các cơ cấu chấp hành. Những ví
dụ phổ biến cho những người yêu thích mới bắt đầu bao gồm các robot đơn giản, điều khiển
nhiệt độ và phát hiện chuyển động. Đi cùng với nó là một môi trường phát triển tích hợp (IDE)

Đồ Án I 8
Thiết kế xe tự hành di động bám tường

chạy trên các máy tính cá nhân thông thường và cho phép người dùng viết các chương trình
cho Aduino bằng ngôn ngữ C hoặc C++. Và điều làm nên hiện tượng Arduino chính là mức
giá rất thấp và tính chất nguồn mở từ phần cứng tới phần mềm.

Hiện tại, có hơn 20 loại bo mạch Arduino được phát triển phù hợp cho với nhu cầu khác
nhau của người sử dụng. Dựa theo mục đích sử dụng, các bo mạch được phân loại theo bảng
sau:

Bảng 1.1. Phân loại bo mạch Arduino. [4]

Mục đích Bo mạch

Phổ thông UNO, LEONARDO, 101, ROBOT, ESPLORA, MICRO, NANO, MINI

MEGA, ZERO, DUE, MEGA ADK, PRO, M0, M0 PRO, MKRZERO,


Nâng cao
PRO MINI

YUN, ETHERNET, TIAN, INDUSTRIAL 101, LEONARDO ETH,


Internet vạn vật
MKRFOX 1200, MKR1000, YUN MINI

GEMMA, LILYPAD ARDUINO USB, LILYPAD ARDUINO


Thiết bị có thể
MAINBOARD, LILYPAD ARDUINO SIMPLE, LILYPAD ARDUINO
đeo được
SIMPLE SNAP

1.2.2. Ứng dụng [5]


Arduino được chọn làm bộ não xử lý của rất nhiều thiết bị từ đơn giản đến phức tạp. Trong
số đó có một vài ứng dụng thực sự chứng tỏ khả năng vượt trội của Arduino do chúng có khả
năng thực hiện nhiều nhiệm vụ rất phức tạp. Có thể kể đến một số ứng dụng nổi bật như: Điều
khiển ánh sáng (đóng ngắt LED, điều khiển ánh sáng theo nhạc), điều khiển máy bay không
người lái, điều khiển máy in 3D. Và một ứng dụng quan trọng không thể không nhắc đến là sử
dụng Arduino để điều khiển robot, đặc biệt là robot di động. Trong Đồ Án này, Arduino được
sử dụng làm mạch điều khiển xe tự hành, mọi công việc đo đạc, điều khiển động cơ đều được
ra lệnh bởi bo mạch này.

Đồ Án I 9
Thiết kế xe tự hành di động bám tường

Hình 1.3. Robot di động tự tránh vật cản dùng camera CMUCam và Arduino Nano.

Đồ Án I 10
Thiết kế xe tự hành di động bám tường

CHƯƠNG 2: THIẾT KẾ PHẦN CỨNG CHO XE TỰ HÀNH


2.1. Cấu tạo xe tự hành
Yêu cầu của bài toán đặt ra là thiết kế xe tự hành có khả năng di chuyển song song với
tường, cạnh phải của xe bám tường, cách tường một khoảng không đổi 25 cm. Để giải quyết
bài toán này, ta sử dụng khung xe Robot ba bánh với bánh trước là bánh đa hướng, hai bánh
sau được điều khiển bởi hai động cơ. Để thu thập dữ liệu khoảng cách phía trước và bên phải
xe, ta cần gắn hai cảm biến siêu âm theo hai hướng tương ứng. Với các yêu cầu đặt ra, ta lựa
chọn động cơ Servo DS04-NFC và cảm biến siêu âm HC-SRF04. Để điều khiển xe tự hành, bo
mạch Arduino Pro Mini là phù hợp nhất bởi với 14 chân tín hiệu số (trong đó có 6 chân PWM),
nó hoàn toàn đáp ứng được nhu cầu điều khiển hai động cơ (cần 1 chân PWM cho mỗi động
cơ) và hai cảm biến (cần 2 chân số cho mỗi cảm biến), các chân còn thừa có tác dụng dự phòng
cho những phiên bản về sau. Nguồn điện cho xe hoạt động được cấp từ Pin sa ̣c 7.4v Lithium
Li-Ion ICR18650-2600mAh.

Như vậy, cấu tạo xe tự hành có dạng như sau:

Hình 2.1. Mô hình xe tự hành.

Trong đó:

Đồ Án I 11
Thiết kế xe tự hành di động bám tường

 B1, B2, B3: Các bánh xe của xe, trong đó B3 là bánh đa hướng.
 MT1, MT2: Động cơ gắn lên bánh phải và bánh trái của xe.
 US1, US2: Hai cảm biến siêu âm.
 MĐK: Mạch điều khiển xe.
 PIN: Nguồn cấp cho xe hoạt động.

Hình 2.2. Hình ảnh thực tế của xe.

Nguyên lý hoạt động của xe được minh họa qua sơ đồ khối:

Hình 2.3. Sơ đồ khối cấu tạo của xe tự hành.

Có thể thấy, cấu tạo của xe gồm có bồn khối cơ bản: Khối nguồn, khối cảm biến, khối điều
khiển và khối động cơ. Ta tiến tới phân tích chi tiết từng khối chức năng.

Đồ Án I 12
Thiết kế xe tự hành di động bám tường

2.1.1. Khối điều khiển


2.1.1.1. Bo mạch Arduino Pro Mini [6]

Đối với khối điều khiển, ta sử dụng Arduino Pro Mini để thu thập và xử lí thông tin từ khối
cảm biến đồng thời đưa ra tín hiệu điều khiển đến khối động cơ.

Arduino Pro Mini là phiên bản nhỏ gọn nhất trong các dòng Arduino nhưng vẫn giữ đầy đủ
tính năng tương đương với Arduino UNO/Nano do cùng sử dụng vi điều khiển chính là
ATmega328P, vì là phiên bản sử dụng chip dán nên Arduino Pro Mini sẽ có nhiều hơn Arduino
UNO 2 chân Analog là A6 và A7, với thiết kế nhỏ gọn và giá thành phải chăng, Arduino Pro
Mini là sự lựa chọn tối ưu cho vô số các ứng dụng khác nhau.

Hình 2.4. Arduino Pro Mini.

Bảng 2.1. Thông số kỹ thuật Arduino Pro Mini.

Vi điều khiển Atmega328P-AU

Điện áp hoạt động 5V

Nguồn cấp 6-12V

Số đầu vào/ra số 14 (6PWM)

Đầu vào tương tự 6

Dòng điện vào/ra số 40 mA

Bộ nhơ chương trình 32 KB

Xung nhịp 16 MHz

2.1.1.2. Vi điều khiển ATmega328P [7]

Thiết kế tiêu chuẩn của Arduino Pro Mini sử dụng vi điều khiển ATmega328P-AU thuộc
họ MegaAVR có sức mạnh hơn hẳn ATmega8. ATmega328P-AU là một bộ vi điều khiển 8 bit

Đồ Án I 13
Thiết kế xe tự hành di động bám tường

dựa trên kiến trúc RISC bộ nhớ chương trình 32KB ISP flash có thể ghi xóa hàng nghìn lần,
1KB EEPROM, và 2KB SRAM.

Hình 2.5. Chip ATmega328P-AU.

Với 23 chân có thể sử dụng cho các kết nối vào hoặc ra I/O, 32 thanh ghi, 3 bộ timer/counter
có thể lập trình, có các ngắt nội và ngoại (2 lệnh trên một vector ngắt), giao thức truyền thông
nối tiếp UART, SPI, I2C. Ngoài ra có thể sử dụng bộ biến đổi số tương tự 10 bít (ADC/DAC)
mở rộng tới 8 kênh, khả năng lập trình được watchdog timer, hoạt động với 5 chế độ nguồn,
có thể sử dụng tới 6 kênh điều chế độ rộng xung (PWM), hỗ trợ nạp bootloader.

Bảng 2.2. Thông số kỹ thuật chip ATmega328P-AU.

Kiến trúc AVR 8 bit

Xung nhịp lớn nhất 20MHz

Bộ nhớ chương trình 32KB

Bộ nhớ EEPROM 1KB

Bộ nhớ RAM 2KB

Điện áp hoạt động 1.8-5.5V


3 Timer gồm 2 Timer 8 bit và 1 Timer 16
Số Timer
bit
Số kênh PWM 6 kênh

Đồ Án I 14
Thiết kế xe tự hành di động bám tường

2.1.2. Khối động cơ


2.1.2.3. Điều chế độ rộng xung PWM [8]

Xung là các trạng thái cao/thấp (HIGH/LOW) về mức điện áp được lặp đi lặp lại. Đại lượng
đặc trưng cho 1 xung PWM (Pulse Width Modulation) bao gồm tần số (frequency) và chu kì
xung (duty cycle).

Phương pháp điều chế độ rộng xung là thay đổi độ rộng của chuỗi xung vuông từ đó thay
đổi điện áp trung bình cấp ra tải, nhằm điều khiển tốc độ động cơ.

Hình 2.6. Độ rộng xung ứng với các giá trị Duty Cycle.

Để tạo xung PWM trong Atmega328P, ta đặt giá trị ban đầu cho thanh ghi OCRx. Khi
TCNTx tăng từ 0 lên bằng giá trị OCRx thì chân OCx được xóa về 0. TCNTx lại tiếp tục tăng
lên đến giá trị ICRx thì reset về 0 và chân OCx được kéo lên 1. Như vậy giá trị của ICRx là
chu kì xung, giá trị của OCRx là thời gian xung ở mức cao.

OCRx
Duty Cycle  (2.1)
ICRx
Xung PWM dùng để điều khiển động cơ Servo có những đặc điểm sau: [9]

 Xung PWM có tần số thông thường trong khoảng 50Hz (20ms).

 Thời gian xung ở mức cao chỉ từ 1ms đến 2ms.

 Có thể có nhiều hơn 1 sự thay đổi trạng thái điện cao/thấp trong 1 chu kỳ.

Đồ Án I 15
Thiết kế xe tự hành di động bám tường

Hình 2.7. Góc quay của Servo ứng với độ rộng xung.

Với thời gian 1ms ở mức cao, góc quay của Servo là 00, 1.5ms góc quay là 900 và 2ms góc
quay là 1800. Các góc khác từ 00 - 1800 được xác định trong khoảng thời gian 1 - 2ms.

Lưu ý: Có thể ghép nhiều xung trong cùng 1 thời gian là 20ms để xác định vị trí góc của
nhiều Servo cùng 1 lúc, tối đa là 10 Servo.

2.1.2.4. Động cơ RC Servo quay 3600 DS04-NFC [10]

Thông thường, các động cơ Servo chỉ quay với góc quay nằm trong khoảng từ 00 – 1800.
Tuy nhiên động cơ DS04-NFC có thể quay liên tục theo cả hai chiều. Động cơ này thường
được sử dụng trong các thiết kế xe với ưu điểm dễ sử dụng, nhỏ gọn, dễ lắp đặt, có thể mua
kèm bánh xe RC Servo để sử dụng với động cơ này. Động cơ có 3 chân là: Vcc, Signal, GND.

Hình 2.8. Động cơ Servo DS04-NFC cùng phụ kiện.

Đồ Án I 16
Thiết kế xe tự hành di động bám tường

Để điều khiển động cơ, ta sử dụng thư viện <Servo.h> của Arduino, cụ thể là hàm
myservo.writeMicroseconds để cấp xung PWM cho động cơ với giá trị đặt từ 1000-2000. Ta
sẽ thấy động cơ quay chậm dần ở khoảng từ 1000 đến 1500, dừng lại, sau đó đảo chiều và quay
nhanh dần từ 1500-2000. Trên Servo có 1 biến trở để canh chỉnh điểm dừng, lợi dụng đặc tính
như trên ta có thể sử dụng Servo như 1 động cơ xoay bình thường với Driver có sẵn trên động
cơ và chỉ sử dụng 1 chân tạo xung duy nhất để điều khiển.

Bảng 2.3. Thông số kỹ thuật động cơ Servo DS04-NFC.

Điện áp hoạt động 4.8 ~ 6.0V

Dòng điện cung cấp <1000mA

Xung yêu cầu Xung vuông điện áp đỉnh từ 3 ~ 5V

Nhiệt độ hoạt động Từ 0 đến 600C

Tốc độ hoạt động (4.8V) 0.22s/600 khi không tải

Tốc độ hoạt động (6.0V) 0.19s/600 khi không tải

Torque (4.8V) 5.5 kg/cm

Kiểu bánh răng Bánh răng nhựa

Kích thước 41 x 20 x 40mm

Khối lượng 38g

Do động cơ sử dụng điện áp 4.8-6V phù hợp với điện áp đầu ra của Arduino nên ta có thể
nối trực tiếp động cơ với Arduino mà không cần thông qua mạch khuếch đại công suất.

Để điều khiển động cơ ta sử dụng đoạn lệnh sau:

Hình 2.9. Code điều khiển động cơ Servo DS04-NFC.

Đồ Án I 17
Thiết kế xe tự hành di động bám tường

2.1.3. Khối cảm biến


Để xác định vật cản xung quanh xe, ta sử dụng cảm biến siêu âm HC-SRF04.

Cảm biến khoảng cách siêu âm HC-SRF04 được sử dụng rất phổ biến để xác định khoảng
cách. Cảm biến sử dụng sóng siêu âm và có thể đo khoảng cách trong khoảng từ 3-600 cm, với
độ chính xác khá cao. Cảm biến HC-SR04 có 4 chân là: Vcc, Trig, Echo, GND.

Hình 2.10. Cảm biến siêu âm HC-SRF04.

Cảm biến siêu âm hoạt động bằng cách phát đi 1 xung tín hiệu và đo thời gian nhận được
tín hiệu trở vể. Sau khi đo được tín hiệu trở về trên cảm biến siêu âm, ta tính được thời gian từ
lúc phát đến lúc nhận được tín hiệu. Từ thời gian này có thể tính ra được khoảng cách.

Hình 2.11. Nguyên lý hoạt động của cảm biến. [8]

Để đo khoảng cách, ta lập trình cho vi điều khiển phát một xung có độ rộng 10µs vào chân
Trig của cảm biến. Ngay khi đó cực phát trên cảm biến sẽ phát ra xung của sóng âm
(v=340m/s). Chân Echo kéo lên mức cao cho đến khi nhận lại được sóng phản xạ thì chân
Echo được kéo xuống thấp. Chiều rộng của xung sẽ bằng với thời gian sóng siêu âm được phát
từ cảm biến và quay trở lại. Sử dụng Timer ta sẽ đo được khoảng thời gian này.

t
d  cm  [8] (2.2)
2* 29.412

Đồ Án I 18
Thiết kế xe tự hành di động bám tường

Trong đó:

 d: Khoảng cách cần đo.


 t: Khoảng thời gian sóng siêu âm được phát từ cảm biến và quay trở lại.

Hình 2.12. Biểu đồ thời gian của cảm biến. [11]

Nếu đo được chính xác thời gian và không có nhiễu, mạch cảm biến siêu âm trả về kết quả
cực kì chính xác. Điều này phụ thuộc vào cách viết chương trình không sử dụng các hàm delay.

Lưu ý: Những trường hợp cảm biến không đo được khoảng cách:

 Khi khoảng cách đến vật lớn hơn 6m.


 Khi mặt phẳng phản xạ không hướng vào cảm biến.
 Khi vật cản quá nhỏ.
 Khi vật cản quá mềm (chăn, gối…).

Hình 2.13. Những trường hợp cảm biến không đo được khoảng cách. [12]

Đồ Án I 19
Thiết kế xe tự hành di động bám tường

Bảng 2.4. Thông số kỹ thuật cảm biến siêu âm HC-SRF04. [11]

Điện áp hoạt động 5V

Dòng điện 30mA (Tối đa 50mA)

Tần số hoạt động 40KHz

Khoảng cách lớn nhất đo được 6m

Khoảng cách nhỏ nhất đo được 3cm

Góc quét 450

Kích thước module 45x20mm

Ứng dụng:

 Đo mực chất lỏng.


 Robot dò đường.
 Sử dụng chống va chạm trong các băng chuyền.
 Kiểm tra, giám sát tình trạng của nguyên liệu gia công.
 Phát hiện, giám sát chiều cao của vật.

Để đo khoảng cách bằng cảm biến, ta sử dụng đoạn lệnh sau:

Hình 2.14. Code điều khiển cảm biến siêu âm HC-SRF04.

2.1.4. Khối nguồn


Bo mạch Arduino Pro Mini cho phép điện áp nguồn cấp nằm trong khoảng 6-12V. Chính vì
vậy, để cung cấp điện áp cho xe hoạt động ổn định, ta lựa chọn Pin sa ̣c 7.4v Lithium Li-Ion
ICR18650-2600mAh.

Đồ Án I 20
Thiết kế xe tự hành di động bám tường

Hình 2.15. Pin sạc 7.4v Lithium Li-Ion ICR18650-2600mAh.

Bảng 2.5. Thông số kỹ thuật pin sạc 7.4v Lithium Li-Ion ICR18650-2600mAh. [13]

Dung lượng 2600mAh

Điện áp ra 7.4V, tối đa 8.4V

Kích thước 68 x 39 x 20 mm

Khối lượng 95g

Dòng xả tối đa 2A

Điện áp vào 8.4V

Có thể thấy pin cho điện áp ra là 7.4V phù hợp với mức điện áp yêu cầu. Với dung lượng
2600mAh pin có khả năng đáp ứng cho xe hoạt động tốt.

2.2. Thiết kế mạch điều khiển xe tự hành [8]


Sau khi đã hiểu rõ nguyên lý hoạt động và cấu tạo của xe tự hành, ta tiến tới thiết kế mạch
điều khiển động cơ nhằm tối ưu phần cứng của xe. Mạch điều khiển bao gồm:

 Khối nguồn.
 Khối xử lí trung tâm.
 Khối sạc pin.
 Hệ thống các Jump kết nối với động cơ, cảm biến, mạch nạp code,…

Đồ Án I 21
Đồ Án I
Thiết kế xe tự hành di động bám tường

22
Hình 2.16. Sơ đồ nguyên lý mạch điều khiển xe tự hành.
Thiết kế xe tự hành di động bám tường

2.2.1. Khối xử lí trung tâm


Khối vi điều khiển ATmega328P sử dụng xung nhịp thạch anh ngoài 16MHz. Khối điều
khiển còn gồm 1 nút reset để khởi động lại chương trình, một đèn LED báo nguồn và 1 nút
nhấn giữ để cấp nguồn từ pin cho ATmega328. Vi điều khiển ATmega328P sau khi được nạp
Bootloader của Arduino UNO, ta có thể sử dụng IDE của Arduino để lập trình sử dụng thư
viện của Arduino. Ngoài ra, ta có thể nạp chương trình trực tiếp cho chip thông qua chuẩn
UART mà không cần sử dụng mạch nạp.

Hình 2.17. Sơ đồ nguyên lý khối xử lí trung tâm.

2.2.2. Khối nguồn


Khối vi điều khiển hoạt động ở mức điện áp 5V, vì vậy cần một khối nguồn thực hiện chức
năng tưng ứng, cung cấp mức điện áp 5V cho các khối của thiết bị từ nguồn pin vào ban đầu.

Trên cơ sở đó, ta có thể lựa chọn IC ổn áp AMS1117-5V để tạo ra nguồn 5V cho thiết bị.

Đồ Án I 23
Thiết kế xe tự hành di động bám tường

Hình 2.18. IC AMS1117-5V.

Bảng 2.6. Thông số kỹ thuật IC AMS1117-5V. [14]

Dải điện áp đầu vào Từ 6.5V đến 12V

Điện áp đầu ra 5V ± 2%

Dòng điện đầu ra tối đa 0.8A

Nhiệt độ hoạt động từ -400C đến 1250C

Hình 2.19. Sơ đồ nguyên lý khối nguồn

Đồ Án I 24
Thiết kế xe tự hành di động bám tường

2.2.3. Mạch sạc pin


Mạch sạc được thiết kế để nạp điện cho 2 viên pin phục vụ hoạt động của xe tự hành. Mạch
sạc sử dụng IC TP4056 và 2 LED báo hiệu trạng thái đang sạc (LED D15 sáng) và đã sạc đầy
(LED D16 sáng).

Hình 2.20. IC TP4056.

Xe tự hành có 2 chế độ là chế độ chạy và chế độ sạc. Việc chuyển đổi giữa 2 chế độ này
được thực hiện bằng việc thay các Jump trên mạch.

Bảng 2.7. Thông số kỹ thuật IC TP4056. [15]

Dải điện áp đầu vào Từ 4V đến 8V

Điện áp đầu ra 4.2V

Dòng điện đầu ra tối đa 1A

Dòng điện sạc tối đa phụ thuộc vào RPROG theo công thức:

VPROG
I BAT  .1200 với VPROG  1V [8] (2.3)
R PROG

Nguồn điện nạp vào thông qua cổng MicroUSB.

Mạch sử dụng điện trở R10 có giá trị 1200Ω để tạo dòng điện sạc là 1A. Cổng microUSB
để sạc pin nên chỉ cần dùng 2 chân VCC và GND.

Đồ Án I 25
Thiết kế xe tự hành di động bám tường

Hình 2.21. Sơ đồ nguyên lý mạch sạc pin.

2.2.4. Hệ thống các Jump kết nối


Mạch điều khiển bao gồm 2 Jump 3x1 kết nối với 2 động cơ Servo, 2 Jump 4x1 kết nối với
2 cảm biến siêu âm, 1 Jump 5x1 kết nối với mạch nạp code, 1 Jump 3x2 để chuyển chế độ hoạt
động của xe, cùng với đó là cái chân vào ra tương tự và số chưa được kết nối. Ngoài ra còn có
Jump để kết nối với cảm biến MPU6050 và động cơ Servo để chuẩn bị cho phiên bản tiếp theo
của xe.

Hình 2.22. Hệ thống các Jump kết nối.

Đồ Án I 26
Thiết kế xe tự hành di động bám tường

2.2.5. Mô hình sản phầm


Sau khi hoàn tất việc thiết kế mạch nguyên lỹ, ta tiến hành thiết kế mạch in PCB cho mạch
điều khiển động cơ. Mạch được thiết kế như hình vẽ:

Hình 2.23. PCB mô phỏng mạch điều khiển động cơ.

Đồ Án I 27
Thiết kế xe tự hành di động bám tường

CHƯƠNG 3: THIẾT KẾ PHẦN MỀM CHO XE TỰ HÀNH


Trong chương này, ta tiến tới xây dựng thuật toán để giải quyết bài toán bám tường của xe
tự hành. Phương pháp giải quyết được nhắc tới trong Đồ Án này là sử dụng bộ điều khiển PID.

3.1. Lập trình cho xe tự hành


3.1.1. Phần mềm Arduino IDE [5]
Để lập trình cũng như gửi lệnh và nhận tín hiệu từ mạch Arduino, nhóm phát triển dự án
này đã cũng cấp đến cho người dùng một môi trường lập trình Arduino được gọi là Arduino
IDE (Intergrated Development Environment).

Hình 3.1. Giao diện Arduino IDE.

Ngôn ngữ lập trình của Arduino dựa trên nền tảng C/C++ rất quen thuộc với người làm kỹ
thuật, nhưng so với lập trình lập trình trực tiếp với vi điều khiển, lập trình với Arduino đơn
giản hơn nhiều vì chỉ phải giao tiếp với phần cứng thông qua các thư viện. Trên website
arduino.cc, có khá nhiều các thư viện viết sẵn để điều khiển ngoại vi: LCD, cảm biến, động
cơ... nên sẽ rất đơn giản cho người sử dụng để viết ra một chương trình ứng dụng của riêng
mình.

Đồ Án I 28
Thiết kế xe tự hành di động bám tường

3.1.2. Lập trình cho ATmega328P [8]


Để lập trình cho ATmega328P, trước tiên ta cần nạp bootloader cho nó.

Bootloader là 1 chương trình nhỏ (firmware) được nạp sẵn vào vi điều khiển, giúp ta có thể
nạp code thông qua UART và Arduino IDE. Nếu không có bootloader, ta sẽ không thể upload
chương trình lên vi điều khiển theo cách thông thường được mà phải sử dụng mạch nạp ngoài.
Bootloader chiếm khoảng 0.5 kB trong 32 kB bộ nhớ chương trình của ATmega328P.

Bảng 3.1. Cách nối dây nạp bootloader cho ATmega328P.

Arduino có bootloader ATmega328P chưa có bootloader


GND GND
5V 5V
D10 (SS) RESET
D11 (MOSI) D11 (MOSI)
D12 (MISO) D12 (MISO)
D13 (SCK) D13 (SCK)

Sau khi nạp bootloader thành công, để nạp chương trình cho Arduino, ta có thể sử dụng
module hỗ trợ giao tiếp UART. Các module này ngoài chức năng nạp chương trình cho các vi
điều khiển hỗ trợ cách thức nạp chương trình theo chuẩn giao tiếp UART (Universal
Asynchronous serial Receiver and Transmitter - giao thức tuyền nhận nối tiếp không đồng bộ)
như Arduino, còn có chức năng trao đổi dữ liệu giữa các thiết bị có giao tiếp UART khác với
máy tính.

3.2. Xây dựng thuật toán cho xe tự hành


3.2.1. Bộ điều khiển PID [16]
Một bộ điều khiển vi tích phân tỉ lệ (bộ điều khiển PID - Proportional Integral Derivative)
là một cơ chế phản hồi vòng điều khiển (bộ điều khiển) tổng quát được sử dụng rộng rãi trong
các hệ thống điều khiển – bộ điều khiển PID là bộ điều khiển được sử dụng nhiều nhất trong
các bộ điều khiển phản hồi. Bộ điều khiển PID sẽ tính toán giá trị "sai số" là hiệu số giữa giá
trị đo thông số biến đổi và giá trị đặt mong muốn. Bộ điều khiển sẽ thực hiện giảm tối đa sai
số bằng cách điều chỉnh giá trị điều khiển đầu vào. Trong trường hợp không có kiến thức cơ
bản (mô hình toán học) về hệ thống điều khiển thì bộ điều khiển PID là sẽ bộ điều khiển tốt
nhất. Tuy nhiên, để đạt được kết quả tốt nhất, các thông số PID sử dụng trong tính toán

Đồ Án I 29
Thiết kế xe tự hành di động bám tường

phải điều chỉnh theo tính chất của hệ thống - trong khi kiểu điều khiển là giống nhau, các thông
số phải phụ thuộc vào đặc thù của hệ thống.

Hình 3.2. Sơ đồ khối của bộ điều khiển PID.

Bộ điều khiển PID gồm 3 thông số đặc trưng: các giá trị tỉ lệ, tích phân và đạo hàm, viết tắt
là P, I, và D. Giá trị tỉ lệ xác định tác động của sai số hiện tại, giá trị tích phân xác định tác
động của tổng các sai số quá khứ, và giá trị vi phân xác định tác động của tốc độ biến đổi sai
số.

Gọi e là sai số của quá trình, được xác định:

e  SP  PV (3.1)

Trong đó:

 SP: Giá trị đặt.


 PV: Giá trị tín hiệu đầu ra.

Nhiệm vụ của bộ điều khiển phản hồi là điểu chỉnh giá trị đầu vào theo giá trị e đo được để
giá trị đầu ra tiến tới giá trị đặt. Tuy nhiên nếu chỉ cộng thêm hoặc trừ đi e vào giá trị điều khiển
thì thời gian đáp ứng của hệ thống có thể sẽ nhanh hơn hoặc chậm hơn thời gian đáp ứng mong
muốn. Do đó cần đến khâu tỉ lệ P. Khâu tỉ lệ làm thay đổi giá trị đầu ra, tỉ lệ với giá trị sai số
hiện tại. Đáp ứng tỉ lệ có thể được điều chỉnh bằng cách nhân sai số đó với một hằng số KP,
được gọi là hệ số tỉ lệ. Khâu tỉ lệ được cho bởi:

P  K Pe (3.2)

Đồ Án I 30
Thiết kế xe tự hành di động bám tường

Nếu hệ số tỉ lệ quá cao, hệ thống sẽ không ổn định. Nếu hệ số tỉ lệ quá thấp, tác động điều
khiển có thể sẽ quá bé khi đáp ứng với các nhiễu của hệ thống.

Hình 3.3. Đồ thị tín hiệu ra theo thời gian, ba giá trị KP (KI và KD là hằng số).

Khí sai số tồn tại trong một khoảng thời gian dài về một phía của giá trị đặt, ta cần tăng tốc
chuyển động của quá trình tới điểm đặt. Nhờ có khâu tích phân ta có thể giải quyết được vấn
đề này. Khâu tích phân tỉ lệ thuận với cả biên độ sai số lẫn quãng thời gian xảy ra sai số. Tổng
sai số tức thời theo thời gian cho ta tích lũy bù đã được hiệu chỉnh trước đó. Tích lũy sai số sau
đó được nhân với độ lợi tích phân và cộng với tín hiệu đầu ra của bộ điều khiển. Biên độ phân
phối của khâu tích phân trên tất cả tác động điều chỉnh được xác định bởi hệ số tích phân KI.
Thừa số tích phân được cho bởi:
t
I  K I  e   d (3.3)
0

Trong đó:

 KI: Hệ số tích phân.


 e   : Hàm sai lệch theo thời gian.

Tuy nhiên, vì khâu tích phân là đáp ứng của sai số tích lũy trong quá khứ, nó có thể khiến
giá trị hiện tại vọt lố qua giá trị đặt (ngang qua điểm đặt và tạo ra một độ lệch với các hướng
khác), do đó cần phải cần trọng khi sử dụng khâu tích phân.

Đồ Án I 31
Thiết kế xe tự hành di động bám tường

Hình 3.4. Đồ thị tín hiệu ra theo thời gian, tương ứng với 3 giá trị KI (KP và KD không đổi).

Tốc độ thay đổi của sai số qua trình được tính toán bằng cách xác định độ dốc của sai số
theo thời gian (tức là đạo hàm bậc một theo thời gian) và nhân tốc độ này với hệ số vi phân
KD . Thừa số vi phân được cho bởi:

d
D  KD et (3.4)
dt

Trong đó:

 KD: Hệ số vi phân.
 e(t): Hàm sai lệch theo thời gian.

Khâu vi phân làm chậm tốc độ thay đổi của đầu ra bộ điều khiển và đặc tính này là đang
chú ý nhất để đạt tới điểm đặt của bộ điều khiển. Từ đó, điều khiển vi phân được sử dụng để
làm giảm biên độ vọt lố được tạo ra bởi thành phần tích phân và tăng cường độ ổn định của bộ
điều khiển hỗn hợp.

Đồ Án I 32
Thiết kế xe tự hành di động bám tường

Hình 3.5. Đồ thị tín hiệu ra theo thời gian, với 3 giá trị KD (KP and KI không đổi).

Khâu tỉ lệ, tích phân, vi phân được cộng lại với nhau để tính toán đầu ra của bộ điều khiển
PID. Gọi u là tín hiệu điều khiển, ta có:
t
d
u  K P e  K I  e   d  K D et (3.5)
0
dt

Nhờ những ưu điểm đã nêu trên, ta có thế ứng dụng bộ điều khiển PID để giải quyết bài
toán xe tự hành bám tường.

3.2.2. Xây dựng thuật toán


Yêu cầu của bài toán đặt ra là cho xe tự di chuyển song song với tường, cạnh phải của xe
bám tường, cách tường một khoảng không đổi 25 cm.

Để giải quyết bài toán này, ta cần sử dụng hai cảm biến siêu âm để thu thập dữ liệu khoảng
cách ở phía trước và bên phải xe. ATmega328P sẽ liên tục đọc dữ liệu theo chu kì 200ms từ
hai cảm biến gửi về. Sai lệch về khoảng cách từ cạnh phải của xe đến tường sẽ được đưa vào
bộ điều khiển PID từ đó đưa ra tín hiệu điều khiển thích hợp để đưa xe trở về đúng quỹ đạo.
Xe phát hiện vật cản phía trước khi cảm biến siêu âm phía trước xe đo được giá trị khoảng cách
nhỏ hơn 15 cm.

Đồ Án I 33
Thiết kế xe tự hành di động bám tường

Do cảm biến siêu âm chỉ có thể đo được khoảng cách đối với vật cản đủ lớn, mặt phẳng của
vật cản tạo với hướng quét của cảm biến một góc lớn hơn 600 nên ta giả thiết môi trường làm
việc của xe thỏa mãn những yêu cầu sau: [17]

 Đối tượng theo phương đứng và đối tượng theo phương ngang phải được đặt vuông
góc với nhau.
 Đối tượng đặt theo phương đứng phải có dạng mặt cong trơn và có bán kính cong
của đoạn bất kỳ không bé hơn khoảng cách từ tâm robot đến mặt cong này.
 Đối tượng đặt theo phương ngang phải có dạng là một mặt phẳng.

Thuật toán dùng để giải quyết bài toán được trình bày rõ hơn thông qua lưu đồ thuật toán.

3.2.2.5. Lưu đồ thuật toán

Đồ Án I 34
Thiết kế xe tự hành di động bám tường

Bắt đầu

Đo D1, D2

Đ
D1 < 15cm Quay trái 450

S
D1, D2: Khoảng cách phía trước và bên phải xe.

e = SP - D2 e: Sai lệch giữa giá trị đặt và khoảng cách đo được.


SP: Giá trị đặt, chọn bằng 25cm.
P, I, D: Các tham số của bộ điều khiển PID.
pe: Giá trị sai lệch của vòng lặp trước.
P = KP*e
U: Tín hiệu điều khiển.
I += KI*e
D = KD*(e – pe) VR, VL: Tốc độ của động cơ phải, trái.
V0: Tốc độ cơ bản của động cơ.

U=P+I+D Đi thẳng

VR = V0 + U Đ
D1 < 15cm
VL = V0 - U

pe = e Đo D1

Đ S
e < -25cm C ≥ 50 C++

C=0

Hình 3.6. Lưu đồ thuật toán điều khiển xe tự hành.

Đồ Án I 35
Thiết kế xe tự hành di động bám tường

3.2.2.6. Diễn giải thuật toán

Ban đầu, xe thu thập dữ liệu từ hai cảm biến siêu âm để xác định D1, D2. Xe sẽ ưu tiên tránh
vật cản phía trước. Khi phát hiện ra vật cản, xe quay trái một góc 450.

Hình 3.7. Khi xe gặp vật cản phía trước.

Sau khi xác định phía trước không có vật cản, xe thực hiện điều chỉnh để bám tưởng với
khoảng cách không đổi 25 cm. Để làm được điều này, vi điều khiển sẽ tính toán giá trị sai số e
theo công thức:

e  SP  D2 (3.6)

Trong đó:

 SP: Giá trị đặt, chọn bằng 25cm.


 D2: Khoảng cách đo được từ cảm biến bên phải xe.

Từ đó, ta suy ra giá trị tương ứng các tham số của bộ điều khiển PID:

P  K P *e (3.7)

Đồ Án I 36
Thiết kế xe tự hành di động bám tường

I  K I *e (3.8)

D  KD *  e – pe  (3.9)

Trong đó:

 e: Giá trị sai lệch của vòng lặp hiện tại.


 pe: Giá trị sai lệch của vòng lặp trước.

Sau nhiều lần thử nghiệm, các hệ số của bộ điều khiển được lựa chọn như sau:

K P  10
K I  0.0075
KD  0

Sau khi có được giá trị tín hiệu đầu ra, vi điều khiển tiến hành điều chỉnh tốc độ hai động
cơ. Cụ thể, nếu phát hiện cạnh phải của xe cách tưởng hơn 25 cm, vi điều khiển sẽ tăng tốc độ
động cơ bên trái và giảm tốc độ động cơ bên phải, độ tăng và giảm tốc độ phụ thuộc vào độ
lớn của sai lệch. Nhờ đó xe sẽ quay sang phải.

Hình 3.8. Khi khoảng cách bên phải xe lớn hơn 25 cm.

Đồ Án I 37
Thiết kế xe tự hành di động bám tường

Tốc độ của hai bánh xe cần được giới hạn vừa đủ để phòng trường hợp khi khoảng cách bên
phải là rất lớn, xe không bị quay tròn tại chỗ cũng như góc quay quá lớn làm xe bị chệch khỏi
quỹ đạo mong muồn.

Hình 3.9. Góc quay cần được điều chỉnh cho phù hợp.

Ngược lại, khi cạnh phải của xe cách tường một khoảng nhỏ hơn 25 cm, tốc độ động cơ
phải sẽ được tăng lên đồng thời tốc độ động cơ trái giảm xuống giúp xe quay sang trái.

Đồ Án I 38
Thiết kế xe tự hành di động bám tường

Hình 3.10. Khi khoảng cách bên phải xe nhỏ hơn 25 cm.

Một trường hợp cần chú ý là khi đặt xe ở vị trí mà khoảng cách phía trước và bên phải đều
rất lớn (đặt giữa một căn phòng), khi đó vi điểu khiển xác định do khoảng cách bên phải lớn
hơn giá trị đặt nên nó sẽ điều khiển xe liên tục quay sang phải dẫn đến tình huống xe chạy
thành vòng tròn mà vẫn không bám được tường. Chính vì vậy ta cần giới hạn thời gian xe ở
trạng thái quay tròn là 10 giây. Để làm được điều này ta sử dụng một biến đếm C để đếm số
chu kỳ liên tiếp mà xe đo được khoảng cách phía trước lớn hơn 15 cm và khoảng cách bên phải
lớn hơn 50 cm (SP - D2 > -25 cm). Ta giới hạn nếu C > 50 (tương đương với 10 giây, do chu
kỳ lấy mẫu là 200ms) thì cho xe đi thẳng đến khi gặp vật cản phía trước nhỏ hơn 15 cm hoặc
khoảng cách bên phải nhỏ hơn hoặc bằng 50 cm. Lúc này xe có thể tiếp tục thực hiện việc bám
tường:

Đồ Án I 39
Thiết kế xe tự hành di động bám tường

Hình 3.11. Khi khoảng cách phía trước và bên phải xe đều lớn.

Do gặp hạn chế về phần cứng nên xe không thể phát hiện vật cản nằm chếch với hướng di
chuyển của xe góc 450. Nhược điểm này sẽ được khắc phục ở những phiên bản sau.

Hình 3.12. Khi có vật cản nằm chếch với hướng di chuyển của xe góc 450.

Đồ Án I 40
Thiết kế xe tự hành di động bám tường

CHƯƠNG 4: KẾT QUẢ THỰC NGHIỆM


Sau khi xây dựng thuât toán cho xe, ta tiến hành nạp code vào Arduino và thử nghiệm cho
xe tự di chuyển trong tòa nhà. Kết quả thu được như sau:

Khi đã đo được khoảng cách bên phải xe là 25 cm và xác định phía trước không có vật cản
(khoảng cách phía trước lớn hơn 15 cm), xe sẽ đi thẳng.

Hình 4.1. Trường hợp phía trước không có vật cản, bên phải cách tường 25 cm.

Hai cảm biến liên tục đo khoảng cách với chu kỳ 200ms, khi phát hiện ra khoảng cách bên
phải lớn hơn 25 cm, xe quay sang phải để thu hẹp khoảng cách, đến khi khoảng cách tới tường
lại là 25 cm, xe di chuyển song song với tường.

Hình 4.2. Trường hợp khoảng cách bên phải xe lớn hơn 25 cm.

Trong trường hợp này, góc quay của xe được điều chỉnh hợp lý để khi khoảng cách bên phải
lớn hơn 25 cm rất nhiều, xe không bị quay tại chỗ.

Đồ Án I 41
Thiết kế xe tự hành di động bám tường

Hình 4.3. Góc quay của xe được điều chỉnh hợp lý.

Khi khoảng cách bên phải nhỏ hơn 25 cm, xe quay sang trái để điều chỉnh cho khoảng cách
trở lai bẳng 25 cm.

Hình 4.4. Trường hợp khoảng cách bên phải xe nhỏ hơn 25 cm.

Nếu phát hiện phía trước có vật cản, xe sẽ quay sang trái.

Hình 4.5. Trường hợp phía trước có vật cản.

Tuy nhiên, nếu có vật cản ở phía trước nằm chếch với hướng di chuyển của xe góc 450, xe
sẽ không xử lý được.

Đồ Án I 42
Thiết kế xe tự hành di động bám tường

Hình 4.6. Trương hợp xảy ra sự cố.

Có thể thấy, xe tự hành có thể tự duy trì được khoảng các 25 cm đối với tường, có khả năng
xử lí tốt ở đa số các tình huống và di chuyển với quỹ đạo như mong muốn. Mặc dù vây, xe vẫn
còn một số hạn chế cần được khắc phục ở phiên bản sau.

Đồ Án I 43
Thiết kế xe tự hành di động bám tường

KẾT LUẬN
Về cơ bản, bài toán bám tưởng đề ra đã được giải quyết tương đối tốt. Tuy nhiên, do hạn
chế về phần cứng, sản phẩm vẫn chưa thực sự hoàn chỉnh, vẫn gặp những tình huống không
thể xử lí chính xác, cụ thể là:

- Do cảm biến siêu âm chỉ có góc quét là 450 nên khi gặp vật cản nằm ngoài phạm vi quét
của cảm biến, xe tự hành không thể tránh được và sẽ xảy ra va chạm. Cách khắc phục là
gắn hai cảm biến siêu âm lên một động cơ servo và cho quay với góc 450 để có thể phát
hiện vật cản từ mọi hướng, từ đó giúp cho việc tự hành của xe đạt hiệu quả cao hơn.
- Do hai bánh xe chưa được cố định chặt vào trục của động cơ nên dẫn đến việc tốc độ
hai bánh không đều nhau khi đặt cùng một tốc độ vào hai động cơ. Cách khắc phục là
gia cố cho bánh xe gắn chặt với trục động cơ bằng ốc vít, đồng thời gắn thêm cảm biến
Encoder vào hai bánh xe để đo tốc độ và tự động hiệu chỉnh bằng phần mềm.
- Cảm biến siêu âm chưa hoàn toàn chính xác khi đo khoảng cách, khi gặp khoảng cách
lớn trên 6m, cảm biến sẽ trả lại những giá trị khoảng cách sai, trong đó có những giá trị
nhỏ hơn 15cm gây sai sót về thuật toán và xe hoạt động không theo ý muốn. Cách khắc
phục là hiệu chỉnh lại thuật toán để loại trừ những kết quả đo sai, sử dụng các cảm biến
có độ chính xác cao hơn.

Ngoài việc khắc phục những điểm thiếu sót, em cũng xin đề xuất phương hướng cải tiển cho
phiên bản tiếp theo:

- Sau khi đã giải quyết tốt bài toán bám tường, vi điều khiển sẽ vẽ lại đường đi của xe
cũng như xác định tọa độ của xe trong không gian. Để làm được điều này, ta cần thêm
cảm biến vận tốc góc MPU6050 để xác định góc quay của xe và cảm biến Encoder để
đo vận tốc xe từ đó suy ra quãng đường dịch chuyển.
- Bài toán mô hình hóa môi trường: Sử dụng cảm biến Lidar để thu thập dữ liệu từ môi
trường xung quanh, kết hợp với tọa độ của xe được xác định bằng phương pháp đã nêu
trên để dựng lại hình dạng 3D của môi trường.

Em xin chân thành cảm ơn sự chỉ bảo của thầy TS. Nguyễn Hoàng Nam và các anh thuộc
Nhóm nghiên cứu của thầy đã giúp em hoàn thành Đồ Án này.

Hà Nội, ngày 14 tháng 6 năm 2017

Sinh viên

Lê Duy Anh

Đồ Án I 44
Thiết kế xe tự hành di động bám tường

TÀI LIỆU THAM KHẢO

[1] D. M. Đăng, "Luân Văn Tốt Nghiệp Đại Học: Robot Di Động Theo Dấu Tường," Đại
Học Bách Khoa Tp.HCM, 2004.

[2] "Arduino," [Online]. Available: https://vi.wikipedia.org/wiki/Arduino#cite_ref-2.

[3] "Types of Arduinos," [Online]. Available: http://karma-


laboratory.com/workshops/arduinoforprogrammers/arduino_types.html.

[4] "Arduino Products," [Online]. Available: https://www.arduino.cc/en/Main/Products.

[5] "Giới Thiệu Về Arduino," [Online]. Available: http://sotatec.com.vn/nhom-gioi-thieu-


sotatec-94.html.

[6] "Arduino Pro Mini," [Online]. Available:


https://www.arduino.cc/en/Main/ArduinoBoardProMini.

[7] "8-bit AVR Microcontrollers Atmega328/P Datasheet Complete," Atmel, 2016.


[Online]. Available: http//www.atmel.com.

[8] N. M. Khang, "Luận Văn Tốt Nghiệp Đại Học: Thiết Kế Xe Tự Hành Mô Hình Hóa
Môi Trường," Đại Học Bách Khoa Hà Nội, 2016.

[9] "Xung PPM," 2014. [Online]. Available: http://arduino.vn/reference/xung-ppm.

[10] "Servo Motor Set - Model: DS04-NFC Datasheet," EKT, [Online]. Available:
http://www.ekt2.com/pdf/412_CH_SERVO_MOTOR_SET.pdf.

[11] "SRF04 Technical Documentation," [Online]. Available:


http://inside.mines.edu/~whoff/courses/EENG383/lab/SRF04%20Technical%20Docu
mentation.pdf.

[12] "Build and Test the Ping))) Sensor Circuit," [Online]. Available:
http://learn.parallax.com/tutorials/robot/activitybot/activitybot/navigate-
ultrasound/build-and-test-ping-sensor-circuit.

Đồ Án I 45
Thiết kế xe tự hành di động bám tường

[13] "Li-Ion 18650 7.4V 2600 mAh 2x18650 2S Rechargeable Battery Pack," SuPower
Battery, [Online]. Available: http://www.batterysupports.com/72v-74v-2-18650-
2600mah-2s-lithium-ion-liion-battery-pack-p-69.html.

[14] "AMS1117," Advanced Monolithic Systems, [Online]. Available:


http://www.advanced-monolithic.com/pdf/ds1117.pdf.

[15] "TP4056," NanJing Top Power ASIC Corp, [Online]. Available:


https://dlnmh9ip6v2uc.cloudfront.net/datasheets/Prototyping/TP4056.pdf.

[16] "Bộ điều khiển PID," [Online]. Available:


https://vi.wikipedia.org/wiki/B%E1%BB%99_%C4%91i%E1%BB%81u_khi%E1%B
B%83n_PID#cite_ref-ben93p48_1-0.

[17] P. V. Hoàn, "Nghiên Cứu Và Kiểm Chứng Thuật Toán Bám Tường Cho Robot Tự
Hành," Đại học Sư Phạm Kỹ Thuật Tp. Hồ Chí Minh.

Đồ Án I 46

You might also like