Professional Documents
Culture Documents
niệm xa lạ với con người. Có rất nhiều robot phổ biến hiện nay có thể kể đến như robot
công nghiệp, robot dịch vụ, robot hút bụi, robot y tế, robot giải trí,… Và tôi xin giới
thiệu tới các bạn một loại robot khá phổ biến đó là robot dò line. Trong bài nghiên cứu
dưới đây tôi sẽ hướng dẫn mọi người cách để điều khiển robot dò line sao cho nó có thể
di chuyển trên line một cách hiệu quả nhất.
3. Arduino UNO R3
Hình 6. Arduino UNO R3
Arduino UNO R3 là một phiên bản phổ biến của board Arduino, được thiết kế để giúp
các nhà phát triển dễ dàng xây dựng các ứng dụng IoT, các hệ thống nhúng và các dự án điện
tử khác. Nó được phát triển bởi tập toàn Arduino.cc và được sản xuất trên nền tảng vi điều
khiển Atmega328P của hãng Atmel.
Arduino UNO R3 có các tính năng như bộ nhớ lưu trữ chương trình 32KB Flash, 2KB SRAM
và 1 KB EEPROM, điều khiển động cơ servo, hỗ trợ giao tiếp USB và I2C, SPI, UART, cảm
biến và module ngoại vi khác. Nó cũng có 14 chân số và 6 chân Analog để kết nối với các thiết
bị ngoại vi.
Arduino UNO R3 cũng có khả năng thực hiện các chức năng như đọc và ghi các tín hiệu từ
cảm biến, điều khiển các thiết bị đầu ra như LED và động cơ, cũng như giao tiếp với máy tính
hoặc các thiết bị khác thông qua USB.
Ở đây chúng ta sẽ thực hiện đưa xe lệch từ trường hợp 5 về trường hợp 4 rồi đưa về trường
hợp 1. Tương tự thì trường 3 cũng sẽ đưa về trường hợp 2 rồi đưa về trường hợp 1. Ý tưởng ở
đây là bánh xe bên trái sẽ đi nhanh hơn bánh xe bên phải thì đầu xe lúc này sẽ hướng về bên
trái.
Hình 12. Biểu diễn xe khi chuyển khi có xuất hiện sai số.
Ta sẽ sử dụng đồ thị Hình A* để thực hiện điều này.
Ở đây tôi thực hiện Bánh A đi với xung enable =90 và Bánh B đi với xung enable =80.
Lúc này ta có :
Δ =V −V =8.1119≈ 8.112 ( ) .
cm
v a b
s
Sau 0.1 s thì S a >S b là Δ v∗0.1=0.8112 cm.
Hình 13. Biểu diễn toán học của xe bắt khi bắt đầu tăng tốc để đi vào vị trí chính giữa của
line.
Ở đây hình vẽ của chúng tôi chưa chính xác nên tôi sẽ bổ xung thêm 1 số điều kiện như sau:
^
FCE= ^
IHG= ^
o
BAD=90 .
^
Lúc này ta có : CB = Δ S =0.8112 cm→ C EB=arctan arctan ( CB
EB )=arctan arctan (
12.2 )
0.8112 o
≈ 3.8
Từ đây ta có thể suy ra thêm 1 hệ quả với khoảng cách lệch bất kỳ và với tốc độ chênh lệch,
ta có thể quy nạp để đưa ra công thức tổng quát như sau :
n
D=∑ ¿ ¿
1
Quay trở lại ở trên thì ta tính được n=3 (tức sau 0.3s) thì xe sẽ từ trường hợp 5 về trường hợp
4. Và sau 0.4s thì xe sẽ từ trường hợp 5 về trường hợp 1. Sau đây chúng tôi sẽ thực hành trên
mô hình thực tế.
Vì thời gian ngắn nên việc đo đạc cũng khá khó nhưng chúng tôi đều có chung 1 kết quả khi
nhìn vào đồng hồ bấm giờ thì xấp xỉ 1 giây. Xe đã đi được vào đúng line nhưng chúng tôi đã
nhận ra được vô cùng nhiều vấn đề khi cho xe chạy.
⮚ Đầu tiên là việc xe không thể đi thẳng nếu để xe ngay từ đầu ở trường hợp 1. Việc 2
bánh xe li tâm khi không quay thẳng như đã phân tích ở trên là không ảnh hưởng tới xe
nhưng có lẽ rằng tín hiệu từ Module L298N chưa đủ tốt để cho 2 bánh di chuyển với
cùng 1 vận tốc. Nên giờ chúng ta sẽ điều khiển xe đi vừa chính giữa line tốt nhất có thể
chứ không thể đi thẳng được vì bản chất là 2 bánh xe đang chạy độc lập với nhau.
⮚ Vấn đề thứ hai là tốc độ phản hồi tín hiệu của cảm biến TCRT5000 khá chậm. Mặc dù
code tôi đã để ở delaymicroseconds(10) nhưng tốc độ này vẫn chưa đủ khi so với tốc
độ xe là quá vượt trội. Nên chúng ta cũng sẽ phải điều khiển xe đi một cách tương đối (
tức là xe sẽ di chuyển xung quanh line mà thôi ).
⮚ Vấn đề thứ ba là đường line bị kẹt ở giữa khoảng cách giữa 2 tín hiệu line. Do khoảng
cách giữa 2 line là 2cm mà đường line chỉ có 1,5 cm nên sẽ có lúc đường line bị kẹt
giữa như hình dưới đây. Nên chúng tôi đã tăng đường line lên từ 1,5cm -> 2cm. Còn
nếu muốn phát triển hơn nữa thì đặt nhiều line cạnh nhau sẽ đưa ra kết quả tốt hơn
( thay vì dùng 5 cảm biến chúng ta có thể tăng lên 7 cảm biến hay 9 cảm biến kết quả
sẽ chính xác hơn mà thuật toán thì không có gì thay đổi.)
Hình 14. Đường line bị kẹt giữa 2 cảm biến TCRT5000.
⮚ Do xe đang di chuyển với tốc độ cao nên việc dừng lại ngay lập tức sau khi không có
tín hiệu là không thể. Điều này dẫn đến sai số khá lớn trong việc xe đi hết line mà vẫn
tiếp tục di chuyển. ( Chúng tôi đo ra được với quãng đường 1m thì quán tính do chiếc
xe gây ra đã đi xa sau khi không có line là từ 24cm đến 30cm ).
⮚ Một số vấn đề khác như khi chạy càng lâu thì suất điện động cảm ứng có xu hướng
chống lại tốc độ quay bánh xe càng tăng làm cho vận tốc khó kiểm soát trên lý thuyết
( thực tế sẽ yếu đi so với việc thực hiện đo ở trên ). Vận tốc ban đầu của xe cũng rất
quan trọng vì ngay khi cấp điện thì bánh xe chưa nhận được toàn bộ điện năng trong
khi phải di chuyển cả 1 chiếc làm xong trong 1 số trường hợp xe sẽ không chạy nên
chúng ta phải cung cấp 1 vận tốc V o để xe có thể hoạt động.
Với v a và v blà tốc độ khác nhau của 2 bánh xe, ta cần lấy hiệu của 2 vận tốc để biết được
độ lợi giữa 2 bánh xe. V sau =0 là do lúc này xe đã dừng rồi .
Ta có năng lượng lúc đầu và lúc sau của xe là :
1 2
E= m ( v o−v sau )
2
E sau=0.
Suy ra : Δ E=E−Esau =E .
Để tính quãng đường bị lực quán tính làm giảm, ta sử dụng công thức của công cơ học :
W =F . d=m . g . μ . d
Trong đó:
Lại có W = E do đó :
1
m . g . μ .d = m ( v o−v sau )2
2
1
( ( v −v )2 )
2 0 sau
→ d=
g.μ
Kết hợp với công thức (*) ở trên thì d ở đây chính là quãng đường đi theo hướng tiếp
theo của xe. Vì vậy ta suy ra được :
^ n
D−d∗sin sin ( 3.8¿¿ o∗n¿)=∑ ¿ ¿ ¿ ¿
1
1
(( v −v )2 )
2 0 sau ^ n
Hay D− ∗sin sin (3.8 ¿ ¿ o∗n ¿ )=∑ ¿¿ ¿ ¿
g. μ 1
Kp (proportional gain) tương ứng với hệ số hồi tiếp, đóng góp tỉ lệ thuận với sai số hiện
tại giữa giá trị đặt trước và giá trị thực tế hiện tại của biến điều khiển. Hệ số này cung
cấp độ nhạy của hệ thống với sai số, giúp điều chỉnh đầu ra của hệ thống theo cách
tương ứng với sai số.
Ta sẽ đo từng giá trị Kp và dựa theo cơ sở lý thuyết để so sánh từng giá trị Kp.
Quãng đường vào line (cm)
Lần 1 97 100 44 34 20 23 13 14 10 5
Lần 2 84 93 40 7 18 178 25 10 6 10
Lần 3 60 72 63 39 27 16 12 14 11 3
Lần 4 80 56 49 32 23 16 14 9 13 4
Lần 5 73 36 55 30 15 18 17 10 9 7
Lần 6 116 62 49 39 21 15 14 13 14 3
Lần 7 100 77 47 28 18 15 13 8 6 8
Lần 8 85 69 43 29 25 14 15 9 14 9
Lần 9 173 52 39 34 20 18 11 11 12 7
Lần
70 56 50 28 19 15 16 9 9 10
10
Trung
93.8 67.3 47.9 30 20.6 32.8 15 10.7 10.4 6.6
bình
Lý
76.5* 79.1* 80.5* 81.85* 82.65* 91.7* 100.27* 102.6* 105.2* 112.5*
thuyết
0.8 0.5 0.4 0.2 0.2 0.2 0.1 0.1 0.1 0.1
(v*t)
Sai 14.44
32.6 27.73 15.7 13.662 4 4.97 0.433 -0.126 4.65
lệch 6
Bảng 2. Bảng sai số giữa thực tế và lý thuyết khi xuất hiện error.
Từ bảng trên có thể nhận thấy lấy Kp=0.7 là hợp lý nhất. Các giá trị Kp nhỏ hơn 0.7 thì
đều gây ra sai số lớn, có thể thấy khi sai số có xu hướng giảm từ Kp=0.1 đến Kp=0.5 thì ới
Kp=0.6 thì tự dưng sai số lại lớn. Nhưng khi xét 10 giá trị Kp thì có thể thấy sự lệch với
Kp=0.5 có thể do phép đo chưa đủ nhiều hoặc lúc này mô hình đang có sự cố. Còn với
Kp=0.8, Kp=0.9 và Kp=1 thì lại đưa ra đáp ứng quá nhanh, lớn hơn cả những số liệu tính toán
ở cơ sở lý thuyết, điều này có thể do cảm biến và độ phản hồi của bộ xử lý, nhiễu, vv… ảnh
hưởng. Vậy dựa vào những giá trị đo được, ta sẽ chọn Kp=0.7.
Nói thêm một chút với trường hợp Kp lớn hơn 1 tôi bỏ qua là vì đáp ứng của mô hình
quá nhanh khiến khả năng tính toán và bấm giờ không đủ nên tôi sẽ bỏ qua những trường hợp
này. Tôi nhận thấy khi Kp quá lớn thì xe gần như sẽ quay vòng tròn (Vận tốc của bánh xe A
lớn hơn vận tốc của bánh xe B quá nhiều, cụ thể là 25cm/s).
Ki (Integral gain) tương ứng với hệ số tích lũy, đóng góp tỉ lệ thuận với tổng sai số tích
lũy của biến điều khiển trong thời gian chạy của hệ thống. Hệ số này giúp giảm thiểu sai
số ổn định của hệ thống.
Vì đáp ứng của xe khi đi trên line thẳng là ổn nếu vị trí ban đầu error là 0 (tức là ở vị trí
chính giữa line). Nên tôi sẽ thực hiện đo xe ở những khúc cua để Ki được thể hiện tốt
nhất vai trò của mình (Sai số liên tục thay đổi vì khúc cua cần đáp ứng nhanh những sai
số để đưa xe ra vị trí error = 0).
Hình 18. Quỹ đạo đi của xe dò line trong khúc cua bán kính 35cm.
Ta nhận thấy khi giá trị error max thì giá trị Ki max là 0.9 vì giá trị enable khi cung cấp
cho xe chỉ là 150 mà thôi. Dựa vào những kết quả đo được tôi đã vẽ ra được quỹ đạo đi
của xe và giá trị Ki=0.7 là hợp lý nhất trong trường hợp này.
⇨ Sau khi thực hiện đo thì tôi thấy tốc độ phản hồi của cảm biến có thể không kịp với
tốc độ đi vào line trong những trường hợp đi đường thẳng. Với độ lệch tối đa chỉ có
4cm mà tốc độ lệch tương đối giữa hai bánh xe có thể lên đến 60cm/s, thời gian đi
vào line lúc này chỉ có 0.06s mà thôi. Đây là tính toán trên lý thuyết nhưng dựa trên
quan sát thì tôi thấy nó thực sự rất nhanh nên điều này cũng ảnh hưởng đến mô hình
tính toán rất nhiều.
⇨ Vậy sau khi nghiên cứu mô hình thì ta đã chọn được bộ thông số PID để xe dò line
có thể chạy tốt đó là Kp=0.7, Kd=0.2 và cuối cùng là Ki =0.1. Nhận thấy xe đi vẫn
chưa ổn khi đi qua những khúc cua nên phần tiếp theo tôi sẽ thêm những
ngưỡng(Threshold hợp lý để xe có thể di chuyển tốt nhất trong đường line khi cua
với bán kính trên).
▪ Tìm hiểu và đặt các giá trị ngưỡng (Threshold).
Sau khi quan sát xe di chuyển trên đường thẳng và đường cong thì tôi có những nhận
xét để hiệu chỉnh thêm bộ PID bằng cách đặt giá trị ngưỡng như sau:
▪ Khi xe đi trên đường thẳng thì giá trị Ki có thể không cần thiết vì Ki ở đây sẽ là
tổng sai số làm tăng độ vọt lố khi xe đi qua line. Mặc dù có giá trị Kd nhưng Kd
ở đây tương đối nhỏ đến ảnh hưởng đến Ki để làm giảm độ vọt lố. Nên tôi sẽ kết
hợp khi mà D (Derivative) khác 0 thì ta sẽ bỏ đi ảnh hưởng của khâu I (integral)
trong trường hợp này.
▪ Khi xe đi trên đường cong thì đa số trong các trường hợp sai số không đổi trong
hết quá trình. Thực tế ta cũng có thể thấy khi cua thì ta sẽ cố gắng để giữ nguyên
tốc độ trong quá trình cua để không làm mất thăng bằng của xe. Chính vì sai số
không đổi nên D (Derivative) bằng 0 (Vì không có sự biến thiên của sai số).
Từ những nhận xét trên kết hợp với Kp, Ki, Kd và sai số đã đặt sẵn thì tôi đã tìm ra
được Threshold là 16 và 26 kết hợp với điều kiện D khác 0 và D bằng 0. Cụ thể là
khi đi đường thẳng thì những ảnh hưởng của khâu I sẽ được bỏ đi và sẽ giảm tất cả
giá trị của PID đi 1 số lần nhất định để làm giảm sự vọt lố. Còn trong quá trình cua
thì sẽ tăng giá trị PID lên 1 số lần để đáp ứng nhanh hơn, sau khi đi hết đường cua
kết hợp với Threshold 16 sẽ làm đáp ứng trở lên chậm lại.
Hình 19. Quỹ đạo của xe khi đi đường thẳng (sai số tối đa)
Từ hình trên ta thấy khi điều khiển bằng phương pháp PID thì đáp ứng đang có xu hướng dao
động tắt dần theo thời gian (Lỗi sai của xe ngày càng ít đi). Nhưng thời gian đáp ứng lại khá
lâu. Khi ta thêm các ngưỡng để xe phản hồi nhanh hơn thì tốc độ trở lại line của xe nhanh hơn
PID khi lỗi sai vượt qua ngưỡng 1 nhưng lại phản hồi chậm hơn PID khi vượt qua ngưỡng 2.
Có thể thấy rằng xe đã phản hồi nhanh hơn nhưng lại ít gây ra độ vọt lố hơn khi áp dụng thêm
Threshold.
Hình 20. Quỹ đạo của xe khi đi qua khúc cua bán kính 35cm.
Khi đi qua khúc cua thì điều khiển PID cũng chỉ giúp xe điều chỉnh sai số ở một mức nào đó.
Việc chúng ta tăng các hệ số Ki, Kd, Kp lên cũng sẽ giúp xe đáp ứng nhanh nhưng điều này lại
phản tác dụng trong quá trình đi trên đường thẳng (Tốc độ 2 bánh xe không nên chênh lệch nhau
quá 60cm/s). Khi ta thêm các ngưỡng vào sẽ giúp xe đi tốt trên đường cong và khi đến đường
thẳng bỏ qua hệ số tích lũy lỗi sai sẽ làm xe đáp ứng chậm lại. Điều này sẽ giúp cho xe giảm độ
vọt lố và không đi ra khỏi line.
Dưới đây là hình ảnh code cho thuật toán thêm ngưỡng (Threshold) vào điều khiển PID.
Hình 21.Thuật toán PID kết hợp với Threshold.
V. Đánh giá, kết luận và hướng phát triển.
Mặc dù ban đầu xe di chuyển chưa được tốt với phương pháp xử lý cơ bản nhưng khi thêm
phương pháp PID và giá trị đặt ngưỡng (Threshold) xe đã đi chuyển ổn hơn trong các trường
hợp như đi thẳng và đi qua đường cong. Xe sẽ đi được tốt với những vòng cua có bán kính lớn
(R lớn hơn hoặc bằng 35cm).
Sau khi nghiên cứu mô hình chúng em xin đưa ra kết luận và hướng phát triển như sau :
▪ Những cảm biến của xe đa số đều là rẻ tiền (10000 VNĐ/TCRT5000) nên độ chính
xác vẫn còn kém và tốc độ xử lý chưa tốt ta nên thay bằng các cảm biến có giá thành
cao hơn thì tốc độ xử lý sẽ nhanh hơn và giúp xe đi chính xác hơn.
▪ Ta có thể lắp thêm những module giao tiếp để xe có thể giao tiếp thông qua mạng
nội bộ hoặc nhiều xe có thể giao tiếp với nhau để thực hiện một nhiệm vụ nhất định.
▪ Ta có thể lắp thêm Camera để giúp xe nhận dạng được những vật cản và xử lý
những khúc cua trước khi xe di chuyển đến.
▪ Sử dụng thêm một số thuật toán để làm giảm độ sai số của xe như: Phương pháp
điều khiển PID nâng cao (Advantage PID), Logic mờ (Fuzzy Logic), mô hình
Markov, Stochastic Gradient Descent (SGD), Recursive Least Square (RLS), Naïve
Bayesian Classifier,…