Professional Documents
Culture Documents
TranManhKhai 0934913304
TranManhKhai 0934913304
HỒ CHÍ MINH
XÁC ĐỊNH
XÁC ĐỊNH
TWO-WHEEL SELF-BALANCING ROBOT FOR OBJECT TRACKING
Lời đầu tiên, em xin gửi lời cảm ơn chân thành đến quý thầy cô trường Đại học
Bách Khoa TP.HCM nói chung, và bộ môn Điều khiển Tự động nói riêng, đã truyền dạy
cho em những kiến thức và kinh nghiệm quý báu để hoàn thành đề tài luận văn này.
Để hoàn thành được đề tài luận văn thì sự giúp đỡ của bạn bè, các anh khóa
trên và đặc biệt là sự chỉ bảo tận tình của thầy hướng dẫn Huỳnh Hữu Phương trong
quá trình làm luận văn.
Cảm ơn đến quý Thầy/Cô Hội đồng chấm luận văn đã dành thời gian nhận xét,
góp ý để cho em có thêm kiến thức, kinh nghiệm.
Lời cuối cùng, em xin cảm ơn gia đình, người thân, bạn bè đã luôn quan tâm,
tiếp động lực cho em trong quá trình làm luận văn.
Trân trọng.
Sinh viên
Trần Mạnh Khải
TRƯỜNG ĐẠI HỌC BÁCH KHOA TP. HỒ CHÍ MINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
KHOA ĐIỆN – ĐIỆN TỬ Độc lập - Tự do - Hạnh phúc
BỘ MÔN: ĐIỀU KHIỂN TỰ ĐỘNG
TP. HCM, ngày….tháng…..năm……..
TÊN ĐỀ TÀI: XE HAI BÁNH TỰ CÂN BẰNG BÁM THEO VẬT XÁC ĐỊNH
Nội dung đề tài: Xe hai bánh tự cân bằng bám theo vật xác định.
Kế hoạch thực hiện: (Mô tả kế hoạch làm việc và phân công công việc cho từng sinh
viên tham gia)
Xác nhận của Cán bộ hướng dẫn TP. HCM, ngày….tháng …..năm…….
Hội đồng chấm luận văn tốt nghiệp, thành lập theo Quyết định số ……………………
ngày ………………….. của Hiệu trưởng Trường Đại học Bách khoa TP.HCM.
1.3. Tình hình nghiên cứu xe hai bánh hiện nay .........................................................3
2.1. Nguyên lý hoạt động của xe hai bánh tự cân bằng ............................................6
2.2.1. Mô hình hóa robot 2 bánh tự cân bằng trên địa hình phẳng............7
3.4. Cấu hình các chân và chế độ hoạt động trên STM32CubeMx .................... 35
3.6. Xử lý tín hiệu của cảm biến MPU6050 qua bộ lọc Kalman ......................... 42
4.1. Đáp ứng các thông số mô phỏng trên Matlab Simulink ............................... 48
4.3.1. Kiểm chứng sự hiệu quả của bộ lọc Kalman và tìm giá trị nhiễu đo
lường R. 50
Đề tài về điều khiển xe hai bánh tự cân bằng là đề tài đã phổ biến đối với các
bạn sinh viên trong những năm gần đây. Nó phổ biến như vậy bởi lẻ vì nhu cầu
thực tế của robot cân bằng ngày càng cao trong nhiều lĩnh vực, vì thế việc
nghiên cứu về đề tài này là rất có ích cho việc nghiên cứu học tập cũng như có
thể đóng góp cho ngành công nghiệp sản xuất ra các sản phẩm liên quan của
Việt Nam sau này.
Để điều khiển được robot hai bánh cân bằng có thể áp dụng nhiều phương pháp
điều khiển như PID, fuzzy, LQR, điều khiển trượt…Mỗi phương pháp điều khiển
sẽ có ưu, nhược điểm riêng ứng với từng mẫu robot cân bằng. Ở đề tài luận văn
tốt nghiệp này, mục tiêu của đề tài sẽ là điều khiển xe hai bánh cân bằng bám
theo vật. Vì mô hình được thiết kế bằng thủ công nên chỉ có điều khiển bằng bộ
PID là phù hợp nhất, không yêu cầu tính toán chính xác các thông số vật lý của
mô hình mà chỉ cần điều chỉnh các hệ số Kp, Ki, Kd là có thể đáp ứng các ngõ ra
với các chỉ tiêu mong muốn trong phạm vi học tập, nghiên cứu. Luận văn này
sẽ chỉ ra từng bước cách áp dụng các cơ sở lý thuyết điều khiển cũng như xử lý
ảnh vào mô hình thực tế của xe hai bánh tự cân bằng bám theo vật xác định.
1
Chương 1. GIỚI THIỆU ĐỀ TÀI
Xe hai bánh tự cân bằng là ứng dụng của hệ con lắc ngược rất quen thuộc với
tất cả các bạn sinh viên học về điều khiển tự động. Đây là đối tượng phi tuyến
MIMO mà chúng ta thường dùng trong các phòng thí nghiệm để kiếm chứng
thực nghiệm các giải thuật điển khiển. Xe hai bánh tự cân bằng là hệ MIMO chỉ
có hai vào là hai động cơ nhưng lại có ba ra là tới lui, quay trái phải, đứng yên
không ngã nên để điều khiển hệ này không phải là chuyện dễ dàng. Ở trên thế
giới các nước phát triển đã sản xuất ra rất nhiều sản phẩm được ứng dụng từ
mô hình này và đã thương mại thành công nhưng ở Việt Nam thì các công ty
sản xuất các sản phẩm tương tự là vẫn còn khá ít. Với các lý do đó thì em xin
chọn đề tài này để có thể nghiên cứu, kiểm chứng các kiến thức điều khiển cơ
bản được học vào trong mô hình và để có cái nhìn thực tế về các sản phẩm xe
hai bánh tự cân bằng ngoài thực tế.
Mục tiêu của đề tài này là phải thực hiện được xe hai bánh tự cân bằng bám
theo vật xác định bằng màu sắc với một khoảng cách nhất định. Xe luôn cân
bằng ngay cả khi chịu tác động của ngoại lực, hướng bám và khoảng cách đến
vật phải chính xác và đáp ứng nhanh nhất có thể. Để thực hiện mục tiêu đó thì
trong thời gian thực hiện cần đặt ra các mục tiêu cụ thể như sau:
2
- Tìm hiểu về cảm biến MPU6050 về các cấu hình và các dùng bộ lọc
Kalman để lọc nhiễu các tín hiệu đo được.
- Tìm hiểu cách cầu hình hệ điều hành cho Raspberry Pi và cách kết nối
Raspberry với màn hình máy tính.
- Tìm hiểu về thư viện OpenCv, lập trình python để xử lý ảnh vật như phát
hiện vật, đo khoảng cách qua Camera Raspberry.
- Nghiên cứu giải thuật để kết hợp truyền nhận các tín hiệu giữa
Raspberry với kit STM32F407.
- Chạy thử và chọn ra các thông số điểu khiển Kp, Ki, Kd để xe cân bằng
và bám theo vật tốt nhất.
- Tìm hiểu về lập trình C# để vẽ biểu đồ quan sát các thông số đặc trưng
cần quan tâm của mô hình.
Cách đây vài năm thì không có công ty nào sản xuất về sản phẩm này chỉ
chủ yếu là các mô hình cơ bản của các sinh viên kỹ thuật nhưng hiện nay đã có
một vài công ty đã sản xuất và đã đạt nhiều thành công trong việc thương mại
như công ty TNHH TMDV Homesheel. Các sản phẩm về xe điện hai bánh cân
bằng của hãng Homesheel như hình dưới:
3
Hình 1.2: Homesheel MI
1.3.2. Ngoài nước
Các sản phẩm robot hai bánh tự cân bằng đã rất phổ biến rất nhiều ở các
cách công nghiệp của các nước phát triển như: Mỹ, Nhật Bản, Hàn Quốc… Với
nhiều loại hình biến tấu theo nhiều kiểu dáng và công dụng khác nhau, phù hợp
với đa dạng môi trường làm việc như robot thể thao, robot phục vụ, robot trong
nhà máy sản xuất. Sau đây là một số hãng robot cân bằng nổi tiếng:
4
Hình 1.4: Robot EMIEW (Nhật Bản)
5
Chương 2. CƠ SỞ LÝ THUYẾT VÀ PHƯƠNG PHÁP THỰC HIỆN
Xe hai bánh tự cân bằng hoạt động dựa vào mô hình con lắc ngược gắn với hệ
hai bánh xe được điều khiển độc lập với nhau:
Khi robot nghiêng về phía trước θ > 0, nếu không có điều khiển thì theo quán
tính, hai bánh xe sẽ chạy về phía sau (phía ngược lại của thân robot đang
nghiêng), dẫn đến robot sẽ bị ngã. Nên trong trường hợp này, chúng ta sẽ điều
khiển cho 2 bánh xe chạy về phía trước (phía mà robot đang nghiêng) nhằm
cho góc lệch θ = 0, robot sẽ cân bằng trở lại. Tương tự, trong trường hợp khi
robot nghiêng về phía sau θ < 0, chúng ta sẽ điều khiển cho 2 bánh xe chạy về
phía sau (phía mà robot đang nghiêng) nhằm cho góc lệch θ = 0, robot sẽ thăng
bằng trở lại.
6
Dưới đây là hình ảnh minh họa điều khiển robot trong các điều kiện về mặt
khác nhau:
Hình 2.2: Điều khiển robot trong các điều kiện bề mặt khác nhau
2.2.1. Mô hình hóa robot 2 bánh tự cân bằng trên địa hình phẳng
7
Hình 2.3: Tổng quan mô hình xe hai bánh cân bằng
Hình 2.4: Mô hình xe hai bánh cân bằng nhìn tờ trên xuống
8
Hình 2.5: Mô hình xe hai bánh cân bằng nhìn từ cạnh bên
9
fm Hệ số ma sát giữa robot và động cơ DC
N Tỉ số giảm tốc
FӨ, Fψ, Fɸ Nm Moment phát động theo các phương khác nhau
10
Phương trình động lực học mô tả chuyển động của robot như sau:
[(2𝑚 + 𝑀)𝑅 2 + 2𝐽𝑤 + 2𝑛2 𝐽𝑚 ]Ӫ + (𝑀𝐿𝑅𝑐𝑜𝑠𝜓 − 2𝑛2 𝐽𝑚 )𝜓̈ − 𝑀𝐿𝑅𝜓̇ 2 𝑠𝑖𝑛𝜓 =
𝛼(𝑣𝑙 + 𝑣𝑟 ) − 2(𝛽 + 𝑓𝑤 )Ө̇ + 2𝛽𝜓̇ (2.1)
1 𝑊2
[ 𝑚𝑊 2 + 𝐽ɸ + (𝐽𝑤 + 𝑛2 𝐽𝑚 ) + 𝑀𝐿2 𝑠𝑖𝑛2 𝜓] ɸ̈2 + 2𝑀𝐿2 𝜓̇ɸ̇𝑠𝑖𝑛𝜓𝑐𝑜𝑠𝜓 =
2 2𝑅2
𝑊 𝑊2
𝛼(𝑣𝑙 − 𝑣𝑟 ) − (𝛽 + 𝑓𝑤 )ɸ̇ (2.3)
2𝑅 2𝑅2
Hình 2.6: Mô hình xe hai bánh cân bằng trong Matlab Simulink
11
Hình 2.7: Bên trong khối Two-wheel balancing robot
Phương trình động lực học của robot như trên thể hiện mối quan hệ giữa
giá trị điện áp điều khiển hai động cơ; bao gồm độ nghiêng, vị trí, vận tốc của
hệ robot, giá trị điện áp hai động cơ 𝑣𝑙 , 𝑣𝑟 tác động lên các thông số đó dưới
dạng tổng 𝑣𝑙 + 𝑣𝑟 còn với góc xoay, giá trị điện áp hai động cơ 𝑣𝑙 , 𝑣𝑟 tác động
lên thông số này dưới dạng hiệu 𝑣𝑟 − 𝑣𝑙 . Khi đó, tách bài toàn hệ robot thành
hai bài toán nhỏ hơn với hai tín hiệu điều khiển 𝑉𝜓 , 𝑉𝜙
1
𝑉𝜓 = 𝑣𝑙 + 𝑣𝑟 𝑣𝑙 = (𝑉𝜓 −𝑉𝜙 )
2
{ => { 1 (2.4)
𝑉𝜙 = 𝑣𝑟 − 𝑣𝑙 𝑣 = (𝑉 + 𝑉 )
𝑟 2 𝜓 𝜙
Khối thực hiện chức năng này gọi là khối phân tách (decoupling)
12
Hình 2.8: Bên trong khối decoupling
2.3. Bộ điều khiển PID
PID – bộ điều khiển vi tích phân tỉ lệ, là một cơ chế phản hồi vòng đ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 công nghiệp –
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 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.
Bộ điều khiển PID được sử dụng rất rộng rãi trong thực tế để điều khiển nhiều
loại đối tượng khác nhau như nhiệt độ lò nhiệt, tốc độ động cơ, mực chất lỏng
trong bồn chứa... do nó có khả năng làm triệt tiêu sai số xác lập, tăng tốc độ đáp
ứng quá độ, giảm độ vọt lố nếu các thông số của bộ điều khiển được chọn lựa
13
thích hợp. Do tính thông dụng của nó nên nhiều hãng sản xuất thiết bị điều
khiển đã cho ra đời các bộ điều khiển PID thương mại rất tiện dụng. [1]
T z 1 KD z 1
G (z) K P K I . . (2.6)
2 z 1 T z
Điều chỉnh tỉ lệ (P): là phương pháp điều chỉnh tạo ra tín hiệu điều chỉnh tỉ lệ
với sai lệch đầu vào.
Điều chỉnh tích phân (I): là phương pháp điều chỉnh tỉ lệ để lại một độ lệch
(offset) sau điều chỉnh rất lớn. Để khắc phục ta sử dụng kết hợp điều chỉnh tỉ
lệ với điều chỉnh tích phân. Điều chỉnh tích phân là phương pháp điều chỉnh
tạo ra tín hiệu điều chỉnh sao cho độ lệch giảm tới 0. Thời gian càng nhỏ thể
hiện tác động điều chỉnh tích phân càng mạnh, ứng với độ lệch càng bé.
Điều chỉnh vi phân (D): khi hằng số thời gian hoặc thời gian chết của hệ thống
rất lớn điều chỉnh theo P hoặc PI có đáp ứng quá chậm thì ta sử dụng kết hợp
14
với điều chỉnh vi phân. Điều chỉnh vi phân tạo ra tín hiệu điều chỉnh sao cho tỉ
lệ với tốc độ thay đổi sai lệch đầu vào. Thời gian càng lớn thì điều chỉnh vi phân
càng mạnh, ứng với bộ điều chỉnh đáp ứng với thay đổi đầu vào càng nhanh.
Điều khiển tỉ lệ (KP) có ảnh hưởng làm giảm thời gian lên và sẽ làm giảm nhưng
không loại bỏ sai số xác lập. Điều khiển tích phân (KI) sẽ loại bỏ sai số xác lập
nhưng có thể làm đáp ứng quá độ xấu đi. Điều khiển vi phân (KD) có tác dụng
làm tăng sự ổn định của hệ thống, giảm vọt lố và cải thiện đáp ứng quá độ. Ảnh
hưởng của mỗi bộ điều khiển KP, KI và KD lên hệ thống vong kín được tóm tắt
ở bảng bên dưới.
Thông Thời gian lên Độ vọt lố Thời gian xác Sai số xác lập
số lập
Bảng 2.2: Ảnh hưởng của các hệ số Kp, Ki, Kd lên chất lượng điều khiển
2.4. Bộ lọc Kalman
Bộ lọc Kalman được giới thiệu lần đầu tiên vào năm 1960 bởi Rudolf E.
Kalman (1930 – 2016), một kỹ sư điện, nhà toán học, nhà phát minh người Mỹ
gốc Hungary. Thực tế đã chứng tỏ bộ lọc Kalman là một khám phá tuyệt vời
trong lĩnh vực “Statistical Estimation Theory”, cũng như là một trong những
khám phá quan trọng nhất thế kỷ 20.
Mặc dù Bộ lọc Kalman được ứng dụng trong nhiều lĩnh vực, chẳng hạn
như Process control, Tracking, Location & Navigation system,… nhưng nó được
sử dụng chủ yếu với 2 mục đích chính là: Estimating the state of dynamic
15
system (Ước tính trạng thái của hệ thống động) và the Analysis of Estimation
Systems. Ở đề tài này thì bộ lọc Kalman dùng cho mục đích ước tính trạng thái
của hệ thống động của hai tín hiệu của cảm biến MPU6050 là gia tốc góc (accel)
và vận tốc góc (gyro).
System state, 𝑥⃗ – vector chứa các biến trạng thái của hệ thống.
Measurement values, 𝑧⃗𝑘 – vector chứa các giá trị trạng thái đo được tại
thời điểm k.
Control input, 𝑢
⃗⃗𝑘 – vector chứa giá trị input của hệ thống tại thời điểm
k;
Posteriori state, 𝑥̂𝑘|𝑘 – giá trị ước tính của các biến trạng thái ở thời điểm
k sau khi thực hiện phép đo 𝑧⃗𝑘 .
Priori state, 𝑥̂𝑘|𝑘−1 – giá trị của các biến trạng thái ở thời điểm k được dự
đoán từ previous state 𝑥̂𝑘−1|𝑘−1 .
Dynamic Model (có khi được gọi là State Transition Model) – mô hình
biểu diễn mối quan hệ giữa các trạng thái của hệ thống tại thời
điểm k và k-1, được dùng để dự đoán Priori state;
Measurement Noise, R – nhiễu trong quá trình đo đạc (sai số của cảm
biến, sai số của dụng cụ đo…);
Process Noise, Qk – nhiễu trong quá trình hoạt động của hệ thống (tác
động của môi trường).
𝑥̂𝑘|𝑘−1 = 𝐹𝑥̂𝑘−1|𝑘−1 + 𝐵𝑢
⃗⃗𝑘 (2.7)
16
Phương trình trên có được khi chúng ta thực hiện trong quá trình dự
đoán trạng thái. Để dự đoán priori state 𝑥̂𝑘|𝑘−1 , chúng ta cần có dynamic model
(chính là ma trận F) dựa vào các phương trình vật lý liên hệ các trạng thái theo
thời gian lấy mẫu.
Sau khi cập nhật các giá trị trạng thái mới chúng ta cần cập nhật là giá trị
ma trận hiệp phương sai 𝑃𝑘|𝑘−1
Phương trình hiệu chỉnh trạng thái ( cập nhật giá trị):
Với H là observation model, là ma trận được ước tính theo giá trị trạng
thái đo được từ cảm biến. Chúng ta sẽ tính được độ lợi Kalman 𝐾𝑘 theo công
thức (2.9). Sau đó chúng ta tính phép đo thực 𝑧⃗𝑘 . Dựa vào công thức (2.10) ta
tính được trạng thái ước lượng posteriori 𝑥̂𝑘|𝑘 . Cuối cùng, ta tính được giá trị
sai số ước lượng tương quan posteriori 𝑃𝑘|𝑘 theo công thức (2.11). Các giá trị
trên sẽ được cập nhật lại sau mỗi chu trình cập nhật thời gian và giá trị (trạng
thái đệ quy tự nhiên).
17
Hình 2.10: Các quá trình trong bộ lọc Kalman
2.5. Phần xử lý ảnh
18
HSV là không gian màu được xác định bởi ba số liệu:
V (Value): Độ sáng - tỷ lệ với độ sáng của pixel sáng nhất trong màu RGB.
Không giống như RGB, HSV tách biệt độ sáng, hoặc cường độ hình ảnh, từ sắc
độ hoặc thông tin màu sắc. Điều này rất hữu ích trong nhiều ứng dụng. Ví dụ, ở
đề tài này thì màu sắc của ảnh sẽ bị thay đổi nhiều về độ sáng, độ bão hòa và
vùng màu ở các môi trường khác nhau. Chúng ta chuyển ảnh sang không gian
màu HSV để có thể dễ dàng lấy ngưỡng trên và dưới của để phù hợp với sự thay
đổi đó.
Contour:
Contour là tập các điểm liên tục tạo thành một đường cong (curve) (boundary),
và không có khoảng hở trong đường cong đó. Đặc điểm chung trong một
contour là các các điểm có cùng hoặc gần xấu xỉ một giá trị màu, hoặc cùng mật
độ. Contour là một công cụ hữu ích được dùng để phân tích hình dạng đối
tượng, phát hiện đối tượng và nhận dạng đối tượng.
Để tìm contour chính xác, chúng ta cần phải nhị phân hóa bức ảnh. Các kỹ
thuật nhị phân hóa như đặt ngưỡng, hoặc candy edge detection.
19
Chương 3. THIẾT KẾ VÀ THỰC HIỆN
Khung sườn có chất liệu từ nhựa mica và trụ vít bằng đồng.
Có mạch in 1 lớp để nối cách chân của các module, thiết bị cảm biến lại
với nhau.
Hai động cơ gắn với hai bánh xe có đường kính 62mm bằng trục lục
giác 12mm.
20
3.1.2. Các thành phần chính của mô hình
21
Thông số kỹ thuật:
22
3.1.2.5. Raspberry Camera V2.1
Camera Raspberry Pi V2 8MP dùng cho máy tính nhúng Raspberry Pi.
Cảm biến IMX219 từ Sony.
Số điểm ảnh: 8MP.
CCD size : 1/4inch
Focal Length : 3.04mm
Angle of View (diagonal) : 62.2 degree
Camera Resolution: 3280 x 2464 pixel stills
Video Resolution: HD 1080p30, 720p60 and 640x480p90 video
Dimensions: 25mm x 23mm x 9mm
Connector: ribbon connector
Interface: CSI
23
Thông số động cơ dc servo giảm tốc JGB37:
Thông số Encoder:
24
3.1.2.7. Mạch điều khiển động cơ TB6612FNG
Sơ đồ chân:
25
3.1.2.8. Cảm biến MPU6050
Các cảm biến bên trong MPU-6050 sử dụng bộ chuyển đổi tương tự - số
(Anolog to Digital Converter - ADC) 16-bit cho ra kết quả chi tiết về góc quay,
tọa độ... Với 16-bit sẽ có 2^16 = 65536 giá trị cho 1 cảm biến.
26
3.1.2.9. Module Bluetooth HC-05
27
3.2. Thiết kế giải thuật
28
3.2.2. Lưu đồ giải thuật điều khiển của hệ thống
Khi xe hoạt động thì STM32 luôn lấy về giá trị góc nghiêng từ cảm biến
MPU6050 thông qua giao thức I2C để xử lý tín hiệu với bộ lọc Kalman.
29
Khi camera không phát hiện vật thì mặc định khoảng cách và góc xoay
của vật với xe là 0. Khi đó chỉ có bộ PID góc nghiêng hoạt động giúp xe cân bằng
tại chỗ. Để xe cân bằng tại chỗ thì giá trị góc nghiêng đặt là bằng 0, bộ PID góc
nghiêng sẽ cho ra tín hiệu điều khiển là giá trị tần số xung cấp cho driver để
điều khiển hai động cơ.
Khi camera phát hiện được vật thì thông qua thuật toán xử lý ảnh sẽ cho
ra hai thông số góc xoay và khoảng cách được truyền UART từ Raspberry xuống
STM32F4. Hai giá trị này sẽ là ngõ vào (giá trị đặt) cho bộ điều khiển PID góc
xoay và PID khoảng cách:
Bộ điều khiển PID góc xoay sẽ xuất ra tín hiệu tần số xung cho driver để
cho xe quay trái hoặc quay phải sao cho ảnh của vật nằm ở trọng tâm của khung
hình camera.
Bộ điều khiển PID khoảng cách sẽ có đầu vào là khoảng cách đặt và ngõ
ra sẽ xuất ra tín hiệu điều khiển là góc đặt. Góc đặt này là ngõ vào của bộ điều
khiển PID góc nghiêng. Với mỗi khoảng cách khác nhau thì PID khoảng cách sẽ
xuất ra giá trị góc đặt tương ứng cho đến đến khi nào khoảng cách từ vật đến
xe bằng đúng giá trị khoảng cách đặt thì PID khoảng cách sẽ xuất ra giá trị góc
đặt là 0. Lúc đó xe đứng yên và cân bằng tại chỗ với khoảng cách đặt trước đó.
30
3.2.3. Lưu đồ giải thuật xử lý ảnh
Sau khi bật camera, chúng ta đọc frame ảnh về liên tục. Sau đó, chúng ta
thay đổi kích thước ảnh xuống với độ rộng width = 600 pixel để tăng khối lượng
tính toán và tăng FPS.
31
Sau khi thay đổi kích thước ảnh thì chúng ta cần làm mờ ảnh để giảm
nhiễu noise và làm trơn ảnh.
Tiếp theo, chúng ta chuyển qua không gian màu HSV để có thể lấy
ngưỡng màu sắc cần xác định của vật. Với mỗi màu sắc thì chúng ta cần lấy
ngưỡng trên và ngưỡng dưới ứng với dài màu đó.
- Chọn màu sắc cần lấy ngưỡng (ví dụ màu xanh lá cây)
- Chọn V từ 25-255.
Sau khi xác định xong màu sắc bằng cách lấy ngưỡng thì chúng ta cần vẽ
đường bao cho vật. Nếu có ít nhất đường bao cho vật thì ta xác định được tọa
độ (x, y) và độ rộng W của đường bao lớn nhất, các đường bao nhỏ hơn sẽ bị
làm ẩn đi. Nếu không có đường bao thì trở lại bước đầu, tiếp tục đọc frame ảnh.
Ta dựa vào tọa độ (x, y) và độ rộng W của đường bao để tính khoảng
cách đến vật và góc xoay của robot so với vật. Cuối cùng là ta truyền UART giá
trị khoảng cách và góc xoay này đến STM32F407 để điều khiển.
32
3.3. Mô phỏng Matlab Simulink
Hình 3.16: Mô hình điều khiển xe hai bánh tự cân bằng trên Simulink.
Tiếp nối phần mô hình hóa xe hai bánh cân bằng trên matlab Simulink ở phần
2.2.2, thì ta sẽ thiết kế các bộ điều khiển để điều khiển xe như hình 3.15. Bộ
điều khiển bao gồm ba bộ PID là DISTANCE PID, ANGLE PID và ROTATION
PID:
Ngõ vào của DISTANE PID là góc theta, ngõ ra sẽ là góc đặt psi_ref cho bộ
ANGLE PID. Ngõ ra của ANGLE PID đặt sẽ là điện áp Vpsi.
Ngõ vào của ROTATION PID là góc phi, ngõ ra sẽ là điện áp Vphi.
Như đã nói ở phần 2.2.2 thì Vpsi và Vphi là ngõ vào của bộ decoupling, ngõ ra
là ra hai tín hiệu điều khiển hai động cơ vr và vl để điều khiển xe cân bằng.
33
Dưới đây là thông số của mô hình của bộ TWBR1 trên Simulink. Các thông số
được chọn và tính toán một cách dự trù. Vì mô hình thực được làm thủ công
bằng tay nên các không thể tính toán chính xác các thông số so với mô hình
thực.
Hình 3.18: Thông số của mô hình xe hai bánh cân bằng trên Simulink Matlab
34
3.4. Cấu hình các chân và chế độ hoạt động trên STM32CubeMx
- Chip STM32F407VGTx sử dụng thạch xung clock Thạch Anh bên ngoài
(8MHz), sau khi qua các bộ chuyển đổi thì xung clock sử dụng cho chip có tần
số 168MHz.
- Cấu hình tổng thể các chức năng như hình 3.20:
35
Hình 3.20: System view on STM32CubeMX.
Cấu hình DMA:
Các chân GPIO Output gồm PE8, PE10 cho Motor bên trái và PE12, PE14 cho
Motor bên phải.
36
Hình 3.23: Cấu hình chân Timer2.
Timer3 dùng để xuất xung PWM xuống Module điều khiển động cơ
TB6612FNG.
Timer4 để tạo ngắt với thời gian ngắt là 0.01s= 10ms, ta sử dụng global
interupt.
37
Hình 3.28: Cấu hình counter cho Timer4.
Cấu hình I2C:
Ta sử dụng I2C3 với các chân PA8, PC9 tương ứng với chế độ SCL và SDA để
truyền nhận tín hiệu giữa MPU6050 và STM32 như hình 3.29.
UART2 là giao thức truyền nhận giữa STM32 và module bluetooth HC-05 để
truyền nhận dữ liệu lên máy tính.
Tx ứng với chân PA2 để truyền dữ liệu từ STM32 sang HC-05 để dữ liệu lên
máy tính.
Rx ứng với chân PA2 để nhận dữ liệu từ máy tính truyền đến HC-05.
38
Cấu hình UART3:
Dựa vào Datasheet của cảm biến MPU6050, ta có thể chọn các chế độ phù với
yêu cầu của mô hình thực và tiến hành cấu hình các thanh ghi như sau:
WHO_AM_I Register: dùng để xác định danh tính của thiết bị. Cảm biến
MPU6050 có giá trị mặc định là 0x68.
39
Hình 3.36: Các chế độ chọn xung nguồn clock.
Sample Rate Divider Register: Chọn tốc độ lấy mẫu là 1kHz.
8 𝑘𝐻𝑧
Ta có MPU = , suy ra SMPLRT_DIV= 0x07.
1+SMPLRT_DIV
40
Hình 3.40: Gyroscope Configuration Register.
41
Hình 3.45: Tầm đo của thanh ghi 67 đến 72 – Gyroscope Measurements.
3.6. Xử lý tín hiệu của cảm biến MPU6050 qua bộ lọc Kalman
Dựa vào cơ sở lý thuyết của thuật toán bộ lọc Kalman rời rạc ở mục 2.4.2, chúng
ta thiết lập được phương trình trạng thái của hệ thống tại thời điểm k là:
Ө
Ma trận trạng thái 𝑥𝑘 là: 𝑥𝑘 = [ ̇ ] (3.2)
Ө𝑏 𝑘
Với Ө là góc nghiêng và Ө̇𝑏 là độ lệch bias dựa trên các phép đo từ giá tốc kế và
con quay hồi chuyển của cảm biến MPU6050. Độ lệch bias là số lượng con quay
hồi chuyển đã trôi sau một thời gian. Để tìm ra độ lệch thì chúng ta dựa vào tỉ
lệ thực trừ đi độ lệch của phép đo con quay hồi chuyển.
1 −∆𝑡
Suy ra 𝑥𝑘 = [ ] 𝑥𝑘−1 = 𝐹𝑥𝑘−1 . (3.5)
0 1
1 −∆𝑡
Do đó, F =[ ].
0 1
Ta có 𝑢𝑘 = Ө̇𝑘 , vì tín hiệu điều khiển 𝑢𝑘 cũng chính là phép đo con quay hồi
chuyển với đơn vị (°/giây).
42
𝑥𝑘 = 𝐹𝑥𝑘−1 + 𝐵Ө̇𝑘 (3.6)
Vì ta không thể đo trực tiếp được Ө , chỉ đo được Ө̇ trong thời gian lấy mẫu ∆𝑡
∆𝑡
nên ma trận 𝐵 = [ ].
0
Tìm ma trận Qk của nhiễu hệ thống:
Qk là ma trận hiệp phương sai ước lượng trạng thái của gia tốc kế và giá trị độ
lệch bias.
𝑄Ө 0
𝑄𝑘 = [ 0 𝑄Ө̇𝑏 ] ∆𝑡 (3.7)
𝑧𝑘 = 𝐻𝑥𝑘 + 𝑣𝑘 (3.8)
Với 𝑣𝑘 là nhiễu đo lường (chính là R), ma trận H là ma trận được ước tính theo
giá trị trạng thái đo được từ cảm biến. Ở đây, chúng ta chỉ đo được Ө̇ từ gia tốc
kế mà không đo được trực tiếp Ө nên 𝐻 = [1 0].
Vậy là chúng ra đã hoàn thành bước khởi tạo, bây giờ chúng ta sẽ triển khai các
ma trận của bộ lọc Kalman:
43
Giai đoạn khởi tạo hiệu chỉnh:
𝑦𝑘 = 𝑧𝑘 − 𝐻𝑥̂𝑘−1|𝑘−1 = 𝑧𝑘 − Ө𝑘|𝑘−1 (3.11)
𝑥̂𝑘|𝑘 = 𝑥̂𝑘|𝑘−1 + 𝐾𝑘 𝑦𝑘
Ө Ө 𝐾𝑦
[ ̇ ] =[ ̇ ] +[ 0 ] (3.14)
Ө𝑏 𝑘 Ө𝑏 𝑘|𝑘−1 𝐾1 𝑦 𝑘
𝑃𝑘|𝑘 = (𝐼 − 𝐾𝑘 𝐻)𝑃𝑘|𝑘−1
𝑃00 𝑃01 𝑃 𝑃01 𝐾 𝑃 𝐾0 𝑃01
[ ] = [ 00 ] − [ 0 00 ] (3.15)
𝑃10 𝑃11 𝑘 𝑃10 𝑃11 𝑘|𝑘−1 𝐾1 𝑃00 𝐾1 𝑃01 𝑘|𝑘−1
Sau khi ta triển khai xong cách phương trình của bộ lọc Kalman thì chúng ta sẽ
dựa vào đó và thực hiện tạo hàm bộ lọc Kalman trên KeilC.
44
3.7. Tính toán tiêu cự và khoảng cách trên Raspberry Pi
Hình 3.46: Một số công thức tính qua ống kính camera
Dựa vào các công thức cơ bản ở trên, muốn đo được khoảng cách bất kì của
một vật đến camera thì ta cần tính tiêu cự F của camera bằng cách như sau:
Đo chiều rộng W của vật bất kì, đặt vật trước camera vật đó và đo khoảng
cách D từ vật đến camera. Tiếp đến là tính độ rộng P của vật trên màn hình
camera với đơn vị Pixel. Ta tính được tiêu cự F qua công thức:
F = (P x D) / W (3.16)
Khi có tiêu cự F ta tính được khoảng cách D’ của vật thể đến camera
thông qua công thức:
D’ = (W x F) / P (3.17)
Vì với mỗi camera có mỗi tiêu cự riêng nên khoảng cách tính được của
một vật đến camera thông qua tiêu cự của camera là có giới hạn. Vì vậy, không
nên để ảnh vượt quá giới hạn đó.
Ta tính toán được tiêu cự của vật theo các khoảng cách thực của vật đến camera
từ 10cm đến 100 cm như bảng sau:
45
K/c(cm) 10 20 30 40 50 60 70 80 90 100
Fcam 345.2 389 408.9 418.6 422.8 429.6 436.2 442.8 445.2 447.8
Dựa vào bảng trên ta đo được giá trị tiêu cự trung bình trong 1m là F = 418.6.
Khi đã có F ta tính được khoảng cách qua camera D_cam. Bảng dưới đây là
khoảng cách thực D_real và khoảng cách đo được qua camera:
D_real(cm) 10 20 30 40 50 60 70 80 90 100
D_cam(cm) 12.1 21.7 30.9 40 49.5 59.3 68.5 77.4 86.8 96.6
Bảng 3.2: Khoảng cách đo qua camera so với khoảng cách thực.
46
3.8. Thiết kế giao diện C# giám sát thông số
Hình 3.47: Giao diện C# theo dõi các thông số đáp ứng của mô hình
Giao diện C# dùng để theo dõi các thông số đáp ứng của mô hình là góc nghiêng
Angle, góc xoay Rotation và khoảng cách Distance
Các thông số được truyền UART từ STM32 đến máy tính thông qua module
Bluetooth HC-05.
Để xem đáp ứng các thông số theo thời gian thực thì phải chọn cổng Com của
Module Bluetooth HC-05 và nhấn Connect. Nếu không đúng cổng Com sẽ không
kết nối được.
Bấm Start để chạy, bấm thêm lần nữa sẽ Stop. Bấm Exit để thoát khỏi theo dõi.
47
Chương 4. KẾT QUẢ THỰC HIỆN
Hình 4.1: Đáp ứng góc nghiêng Angle trên Matlab Simulink.
Nhận xét: Độ vọt lố POT= 28.6%.
Hình 4.2: Đáp ứng góc xoay Rotation trên Matlab Simulink.
48
Nhận xét: Không có độ vọt lố
Hình 4.3: Đáp ứng khoảng cách Distance trên Matlab Simulink.
Nhận xét: Như đã nói ở phần thiết kế 3.3 Mô phỏng trên Matlab Simulink. Do
thông số mô phỏng của mô hình trên Simulink chỉ là dự trù, không thể tính toán
chính xác các thông số đó ứng với mô hình thực do mô hình được thực hiện thủ
công. Nên việc điều chỉnh các thông số Kp,Ki, Kd rất khó có thể để đáp ứng ngõ
ra cho cả 3 bộ điều khiển Angle PID, Rotation PID và Distance PID. Ở trường
hợp này thì ngõ ra của bộ Distance PID không thể đáp ứng.
49
4.2. Kết quả thực hiện xử lý ảnh trên Raspberry Pi
4.3.1. Kiểm chứng sự hiệu quả của bộ lọc Kalman và tìm giá trị
nhiễu đo lường R.
Để tìm nhiễu đo lường R cho ngõ vào bộ lọc Kalman thì ta xác định bằng
cách thử các giá trị R khác nhau và chọn ra R để ngõ ra của bộ lọc Kalman là tối
ưu nhất, đồng thời kiểm chứng sự hiệu quả của bộ lọc Kalman.
Sau đây là các trường hợp đo được của các giá trị góc nghiêng Angle_raw
đo được từ cảm biến MPU6050 và giá trị góc nghiêng sau khi được xử lý bằng
bộ lọc Kalman:
50
Trường hợp 1: R=0.05
Hình 4.5: Đáp ứng góc nghiêng của hệ thống với nhiễu đo lường R=0.05
Hình 4.6: Đáp ứng góc nghiêng của hệ thống với nhiễu đo lường R=0.2
51
Trường hợp 3: R=0.5
Hình 4.7: Đáp ứng góc nghiêng của hệ thống với nhiễu đo lường R=0.5
Trường hợp 4: R= 0.8
Hình 4.8: Đáp ứng góc nghiêng của hệ thống với nhiễu đo lường R=0.8
Nhận xét: Với các trường hợp trên thì ta có thể thấy với R=0.05 thì bộ lọc
Kalman cho ra ngõ ra ít bị nhiễu nhất. Nói chung thì ta thấy bộ Kalman đã lọc
các tín hiệu đo được từ cảm biến MPU6050 rất hiệu quả, các nhiễu đo lường đã
được loại bỏ rất nhiều. Nhờ thế mà mô hình được hoạt động ổn định hơn.
52
4.3.2. Góc nghiêng Angle
Đáp ứng ngõ ra của bộ Angle PID với tín hiệu đặt là Psi_ref=0o:
Hình 4.9: Đáp ứng góc nghiêng của hệ thống khi không có vật nặng.
Trường hợp 2: Có vật nặng 1.5kg đặt lên xe.
Hình 4.10: Đáp ứng góc nghiêng của hệ thống khi đặt vật 1.5kg lên xe.
Nhận xét: Ở cả hai trường hợp có vật nặng và không có vật nặng đặt lên xe thì
robot vẫn câng bằng tốt với độ giao động nhỏ trong khoảng [-0.50, 0.50].
53
4.3.3. Góc xoay Rotation
Sau đây là đáp ứng ngõ ra của bộ Rotation PID, với các trường hợp có
vật nặng và không có vật nặng đặt lên xe:
Trường hợp 1: Giá trị góc xoay ban đầu là 250, không có vật đặt lên xe.
Hình 4.11: Đáp ứng góc xoay của hệ thống với góc xoay ban đầu là 250, không
có vật nặng đặt lên xe.
Trường hợp 2: Giá trị góc xoay ban đầu là 250, vật nặng 1.5kg đặt lên xe.
Hình 4.12: Đáp ứng góc xoay của hệ thống với góc xoay ban đầu là = 250, đặt
vật 1,5kg lên xe.
54
Trường hợp 3: Giá trị góc xoay ban đầu là -300, không có vật nặng đặt
lên xe.
Hình 4.13: Đáp ứng góc xoay của hệ thống với góc xoay ban đầu là -300, không
có vật nặng đặt lên xe.
Trường hợp 4: Giá trị góc xoay ban đầu là -250, vật nặng 1.5kg đặt lên
xe.
Hình 4.14: Đáp ứng góc xoay của hệ thống với góc xoay ban đầu là - 250, đặt
vật 1,5kg lên xe
55
Nhận xét: Chúng ta có thể thấy ở tất cả các trường hợp thì ngõ ra góc xoay của
hệ thống đáp ứng tốt với sai số xác lập nhỏ, độ vọt lố nhỏ. Tuy nhiên, ở trường
hợp có vật nặng lên xe thì thời gian đáp ứng chậm hơn so với trường hợp không
có vật nặng đặt lên xe.
Nguyên nhân dẫn đến điều này là do trọng lực của vật nặng tác động lên xe lớn
lớn làm cho động cơ không đáp ứng nhanh được như khi không có vật nặng.
Trường hợp 1: Vật xe ban đầu cách vật 50 cm và xe sẽ bám theo vật đến
khi còn cách vật 20cm và duy trì với khoảng cách đó:
Hình 4.15: Đáp ứng khoảng cách của hệ thống khi khoảng cách đặt
distance_ref =20 cm và khoảng cách ban đầu là 50 cm.
56
Trường hợp 2: Vật xe ban đầu cách vật 20cm và xe sẽ bám theo vật đến
khi còn cách vật 50cm và duy trì với khoảng cách đó:
Hình 4.16: Đáp ứng khoảng cách của hệ thống khi khoảng cách đặt
distance_ref =50 cm và khoảng cách ban đầu là 20 cm.
Trường hợp 3: Vật xe ban đầu cách vật 79cm và xe sẽ bám theo vật đến
khi còn cách vật 50cm và duy trì với khoảng cách đó:
Hình 4.17: Đáp ứng khoảng cách của hệ thống khi khoảng cách đặt
distance_ref =50 cm và khoảng cách ban đầu là 79 cm.
57
Trường hợp 4: Vật xe ban đầu cách vật 35 cm và xe sẽ bám theo vật đến
khi còn cách vật 60 cm và duy trì với khoảng cách đó:
Hình 4.18: Đáp ứng khoảng cách của hệ thống khi khoảng cách đặt
distance_ref =60 cm và khoảng cách ban đầu là 35 cm.
Trường hợp 5: Vật xe ban đầu cách vật 80cm và xe sẽ bám theo vật đến
khi còn cách vật 60cm và duy trì với khoảng cách đó:
Hình 4.19: Đáp ứng khoảng cách của hệ thống khi khoảng cách đặt
distance_ref =60 cm và khoảng cách ban đầu là 80 cm.
58
Nhận xét: Thời gian quá độ của khoảng cách là khoảng 5-6 giây và sai số xác
lập tương đối nhỏ trong tất cả các trường hợp khoảng cách ban đầu bé hơn
70cm. Nhưng với khoảng cách ban đầu là 79 cm và 80 cm như ở trường hợp 3
và 5 thì độ vọt lố tăng rõ rệt, hệ thống lâu xác lập hơn.
59
Chương 5. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
- Thiết kế xe hai bánh cân bằng bám theo vật với màu sắc xác định với một
khoảng cách cố định.
- Hiểu được lý thuyết cơ bản về điều khiển xe hai bánh cân bằng và áp dụng
thành công bộ điều khiển PID lên mô hình.
- Áp dụng thành công lý thuyết của bộ lọc Kalman vào thực tế để xử lý tín hiệu
cảm biến góc nghiêng MPU6050.
- Hiểu rõ và thực hiện được cách phát hiện vật bằng màu sắc đồng thời việc
thực hiện tính khoảng cách và góc xoay qua camera trên Raspberry.
- Thiết kế giao diện C# để theo dõi đáp ứng các thông số của các bộ điều khiển.
- Mô hình điều khiển theo bộ điều khiển PID nên các chất lượng của đáp ứng
ngõ ra trong quá trình cân bằng tại chỗ cũng như bám vật thể sẽ bị thay đổi.
Nguyên nhân là do bộ điều khiển PID chỉ phụ thuộc vào ngõ vào và các hệ số
Kp ,Ki, Kd nên khi pin cấp cho động cơ yếu thì tốc độ động cơ cũng giảm theo
làm cho mô hình đáp ứng chậm hơn.
- Khi đặt vật nặng 1.5kg lên xe, mô hình có thể cân bằng và xoay trái, xoay phải
tại chỗ được nhưng không thể bám theo vật với khoảng cách xa được. Nguyên
nhân là do bánh xe nhỏ và động cơ khá yếu.
- Mô hình chỉ phát hiện vật bằng màu sắc nên bị nhiễu trong môi trường ánh
sáng không tốt. Nguyên nhân là vì mô hình sử dụng máy tính nhúng Raspberry
60
3B+ có cấu hình khá yếu, không thể thực hiện các thuật toán phát hiện vật tốt
hơn như deep learning, machine learning…
- Mô hình không thể đo khoảng cách đến vật một cách chính xác khi vật thể ở
quá xa. Nguyên nhân do camera có độ phân giải thấp và tiêu cự ngắn.
- Nếu có kinh phí tốt hơn sẽ tiến hành thay máy tính nhúng và camera tốt hơn
để thực hiện các thuật toán phát hiện vật tối ưu hơn như deep learning,
machine learning…
- Thiết kế phần cơ khí mô hình tốt hơn như in 3D cho khung sườn xe. Sử dụng
động cơ tốt hơn và bánh xe có kích thước phù hợp để có thể cân bằng ổn định
và bám theo vật với khoảng cách xa hơn kể cả khi đặt vật nặng lên xe.
- Sử dụng các phương pháp điều khiển tối ưu hơn như: LQR, Fuzzy, Nơ-ron,
điều khiển trượt… để xe cân bằng và bám vật thể ổn định hơn.
61
TÀI LIỆU THAM KHẢO
[1] Nguyễn Thị Phương Hà, Huỳnh Thái Hoàng, Lý thuyết điều khiển tự động,
nhà xuất bản đại học Quốc gia Thành phố Hồ Chí Minh, 2010.
[2] Nguyễn Thái Vin, Robot hai bánh tự cân bằng, Luận văn tốt nghiệp, Đại học
Bách khoa Tp. Hồ Chí Minh, 2016.
https://codelungtung.wordpress.com/2019/05/29/bo-loc-kalman/
https://docs.opencv.org/4.5.2/dc/da5/tutorial_py_drawing_functions.ht
ml
[4] Trần Anh Tứ, Nghiên cứu, thiết kế, thử nghiệm xe hai bánh cân bằng, Luận
văn thạc sĩ, Trường đại học Công nghệ Tp. Hồ Chí Minh, 2014.
http://blog.tkjelectronics.dk/2012/09/a-practical-approach-to-kalman-
filter-and-how-to-implement-it/
62