Khối điều khiển công suất động cơ: Như đã trình bày, Bộ điều khiển động cơ gồm
2 kênh điều khiển động cơ kiểu cầu H dùng Mosfet và 03 kênh Mosfet kết hợp với rơle để đảo chiều động cơ:
- Sơ đồ mạch điện khối điều khiển động cơ sử dụng cầu H được trình bày trong hình 4.24.
77
Hình 4.29 Sơ đồ mạch nguyên lý khối điều khiển động cơ kiểu cầu H sử dụng Mosfet(IRF 540 và IRF9540)
- Sơ đồ mạch điện khối điều khiển động cơ sử dụng Mosfet kết hợp với rơ le đảo chiều được trình bày trong hình 4.25.
Hình 4.30 Sơ đồ mạch nguyên lý khối điều khiển động cơ kiểu cầu Mosfet kết hợp với rơ le đảo chiều quay động cơ
U7 PC817 U9 PC817 Q14 IRF540 Q15 IRF540 Q13 IRF9540 Q17 IRF9540 1 2 M P6 Header 2 - M 10K R24 D25 M7 D13 M7 D14 M7 D29 M7 +24V 104 C5 U36 PC817 U12 PC817 +3.3V R72 470 8 10 9 U35D 74AC00PC +3.3V R74 470 R5 470 +3.3V 5 6 4 U35B 74AC00PC 11 13 12 U35C 74AC00PC R75 470 +3.3V R9 1k +24V R73 1k +24V 1 2 3 U35A 74AC00PC PWM1 CW/CCW1 GND_M GND_M GND_M GND_M 10K R71 10K R76 10K R77 5 6 U50C 74AC04PC 13 12 U50D 74AC04PC
78
4.5.3 Sơ đồ khối chức năng robot di động
Hình 4.32 Sơ đồ các khối chức năng trên robot Hình 4.31 Robot DDMR và đối tượng đích Hình 4.31 Robot DDMR và đối tượng đích
Thu nhận ảnh Đọc ảnh, xử Lý ảnh, xác định tọa độ đích... Tính toán, xử lý dữ liệu, thuật toán điều khiển.. Motor gắn trên robot Xác định khoảng cách từ đối tượng đích đến robot Camera
Khối xử lý ảnh Khối điều khiển
trung tâm
Cơ cấu chấp hành
Khối cảm biến siêu âm Đích Đối tượng đích C A ME R A IMA GE P R OC E SS OR C ONT R O L L E R B A T T E R Y Mo to r1 Mo to r2 Wheel 1(Right) Wheel 2(Left)
79
Sơ đồ thực nghiệm hệ thống điều khiển robot di động chuyển động tới đích sử dụng trong mô hình thực tế:
Hình 4.33 Sơ đồ hệ thống điều khiển mobile robot chạy thực nghiệm
80
Hình 4.34 Lưu đồ thuật toán điều khiển chuyển động robot Y Y N Điều khiển Robot đến đích Tới đích Xác định toạ độ đích so với tọa độ robot Kết thúc chương trình Bắt đầu chương trình chạy tự động Chọn đối tượng đích
81
Hình 4.35 Lưu đồ thuật toán chương trình xử lý ảnh và điều khiển robot di chuyển tới đích
N
Y
N Y
Kiểm tra có phải là đối tượng đã chọn
Đọc hình ảnh truyền về từ camera(2.18), (2.12) Hiển thị lên giao diện Touch Screen(2.14)
Bắt đầu chương trình (Đối tượng đích nằm trong vùng quan sát của camera)
Xử lý ảnh sơ bộ(2.19),(2.20) Chuyển đổi không gian màu RGB → HSV,(2.6)
Hiển thị ảnh HSV lên màn hình(2.14)
Tìm kiếm màu theo màu của đối tượng Xác định các đối tượng cvFindContours
Lọc đối tượng đích(2.24) Loại bỏ nền
Xác định tọa độ tương đối của của đối tượng đích Truyền thông tin tọa độ cho bộ điều khiển chuyển động
Đọc dữ liệu tọa độ tương đối của đối tượng đích truyền về từ khối xử lý ảnh và khối cảm biến siêu âm
Điều khiển robot dừng chuyển động
Điều khiển động cơ đưa robot chuyển động tới đích thông qua
các thuật toán điều khiển trong chương trình vi điều khiển(*) So sánh sai lệch tọa độ đối
tượng đích với tọa độ robot εx<=10?
Kết thúc chương trình
82
Hình 4.36 Lưu đồ thuật toán chương trình điều khiển động cơ đưa robot chuyển động đến đích N Y Y εy>=0? Bắt đầu chương trình
Xách định dấu và giá trị sai lệch εy của đối tượng đích so với robot
Điều khiển robot dừng lại εx<=10? Kết thúc chương trình PWM1 = PWM0 + uy PWM2 = PWM0 - uy
Tính toán đại lượng điều khiển uy qua giải thuật PID
N
PWM1 = PWM0 - uy
83
Trong lưu đồ thuật toán trên nhiệm vụ của bộ điều khiển là điều khiển robot DDMR (Điều khiển hai động cơ gắn với bánh 1 và bánh 2) đến đúng vị trí đích với các yêu cầu: Chính xác (Accurate), nhanh (Fast response), ổn định (Small overshot) do đó bộ điều khiển được sử dụng là bộ điều khiển PID.
.
Hình 4.37 Sai lệch tọa độ tương đối vị trí đích và robot
Do điều kiện thực nghiệm thực tế giá trị sai lệch εx camera đo được chỉ là tương đối nên tác giả chỉ dùng giá trị này để làm căn cứ xác định robot đã tiến gần tới đích chưa mà không áp dụng luật điều khiển cho sai lệch này.
Sử dụng bộ điều khiển PID cho sai lệch εy và bộ điều khiển này có dạng sau: uy = kp*e1 +kd*(de1/dt) + ki*∫ 𝒆𝟏𝒅𝒕
Trong đó:
uy - là tín hiệu đầu ra điều khiển.
kp, kd, ki tương ứng là các hằng số tỷ lệ, vi phân và tích phân của bộ điều khiển. e1 là sai số cần điều khiển tức là độ lệch của đích so với tâm robot (Sai số e1 được xác định từ bộ xử lý ảnh, chính là giá trị tọa độ tương đối giữa đích và robot εy như hình 4.38 ) . (4.1) εy εx o Hướng di chuyển của robot
84
Từ đầu ra của bộ điều khiển PID trong (4.1) ta sẽ xác định giá trị PWM điều khiển động cơ hai bánh theo hai cặp phương trình tương ứng sau tùy vào dấu của sai lệch εy:
Nếu sai lệch e1 = εy có dấu dương:
PWM1= PWM0 – uy. PWM2= PWM0 + uy. Nếu sai lệch e1 = εy có dấu âm:
PWM1= PWM0 + uy. PWM2= PWM0 - uy.
Công thức của bộ điều khiển PID trình bày trong (4.1) là dạng hàm liên tục của biến e1, trong đó có cả thành phần tuyến tính, đạo hàm và tích phân. Tuy nhiên, hệ thống vi điều khiển lại là hệ thống số do đó muốn xây dựng bộ điều khiển PID cho vi điều khiển chúng ta phải tiến hành xấp xỉ phương trình liên tục trên thành phương trình dạng rời rạc.
Vì bộ điều khiển PID xây dựng trong ARM sẽ là bộ điều khiển số, chúng ta cần xấp xỉ công thức của bộ điều khiển này theo các khoảng thời gian rời rạc. Trước hết, thành phần P tương đối đơn giản vì đó là quan hệ tuyến tính Kp*e1, chúng ta chỉ cần áp dụng trực tiếp công thức này mà không cần bất kỳ xấp xỉ nào. Tiếp đến là xấp xỉ
cho đạo hàm của biến e1. Vì thời gian lấy mẫu cho các bộ điều khiển thường rất bé
nên có thể xấp xỉ đạo hàm bằng sự thay đổi của e1 trong 2 lần lấy mẫu liên tiếp: de1/dt ≈ (e1(k)–e1(k-1))/h.
Trong đó e1(k) là giá trị hiện tại của e1, e1(k-1) là giá trị của e1 trong lần lấy mẫu trước đó và h là khoảng thời gian lấy mẫu (h là hằng số) cách lấy xấp xỉ đạo hàm của biến sai số e1 được trình bày trong hình 4.38.
85
Hình 4.38 Xấp xỉ đạo hàm của biến sai số e1
Thành phần tích phân được xấp xỉ bằng diện tích vùng giới hạn bởi hàm đường biểu diễn của e và trục thời gian. Do việc tính toán tích phân không cần quá chính xác, chúng ta có thể dùng phương pháp xấp xỉ đơn giản nhất là xấp xỉ hình chữ nhật. Ý tưởng được trình bày trong hình 4.39.
Hình 4.39 Xấp xỉ tích phân của biến sai số e
Tích phân của biến e1 được tính bằng tổng diện tích các hình chữ nhật tại mỗi thời
điểm đang xét. Mỗi hình chữ nhật có chiều rộng bằng thời gian lấy mẫu h và chiều cao là giá trị sai số e1 tại thời điểm đang xét. Tổng quát:
∫ 𝒆𝟎𝒕 𝟏𝒅𝒕 = ∑ 𝒆𝒌 𝟏(𝒌) ∗ 𝒉 𝟎 e t h k-1 k e1(k-1) e1(k) de1/dt ≈ (e1(k)–e1(k-1))/h e t h k-1 k e1(k-1) e1(k) e1(k)*h e1(1) e1(2) (4.3)
86
Tổng hợp các xấp xỉ (4.2) và (4.3), công thức của bộ điều khiển PID số được trình bày trong (4.4)
uy = kp*e1 +kd*((𝒆𝟏(𝒌)−𝒆𝟏(𝒌−𝟏))
𝒉 ) + ki*∑ 𝒆𝒌 𝟏(𝒌) ∗ 𝒉
𝟎
Trong (4.4) Để đơn giản hóa việc tính thành phần tích phân, chúng ta nên dùng phương pháp “Cộng dồn” (Hay đệ quy):
I(k) = I(k-1) + e1(k)*h
Với I(k) là thành phần tích phân hiện tại và I(k-1) là thành phần tích phân trước đó.
Từ (4.3) và (4.4) ta được:
uy = kp*e1 +kd*((𝒆𝟏(𝒌)−𝒆𝟏(𝒌−𝟏))
𝒉 )+ ki* I(k)
Ta có thể thấy công thức (4.6) hoàn toàn có thể thực hiện bằng ARM.
Bằng quá trình thực nghiệm tác giả chọn được các tham số Kp = 10, Kd = 8, Ki = 1,
với thời gian trích mẫu h = 20ms, PWM0 = 5000. Tiến hành thực nghiệm trên mô
hình robot thực tế ta thu được một số kết quả trình bày trong phần 4.5.5.
4.5.5 Một số kết quả thực nghiệmHình ảnh robot di động thực tế: Hình ảnh robot di động thực tế:
Hình 4.40 Hình ảnh mô hình robot thực tế sử dụng trong luận văn
(4.4)
(4.5)
87
Sai lệch vị trí e giữa robot và đối tượng đích thu được từ camera:
Đối tượng đích nằm giữa robot(Sai lệch e=0)
Đối tượng đích lệch trái Đối tượng đích lệch phải Hình 4.41 Sai lệch e giữa đối tượng đích và robot
88
Hình ảnh robot di động và đối tượng đích:
89 Trong đó:
1- Vùng hiển thị ảnh chính đã qua xử lý, cho phép người dùng quan sát và chọn đối tượng đích.
2- Thanh Progessbar biển diễn giá trị εx.
3- Vùng hiển thị ảnh trực tiếp thu được từ camera chưa qua xử lý. 4- Vùng ảnh sau khi chuyển đổi không gian màu RGB-HSV. 5- Dải màu của đối tượng đích đã chọn không gian màu RGB. 6- Dải màu của đối tượng đích đã chọn không gian màu HSV. 7- Thời gian xử lý ảnh.
8- Tọa độ tương đối của đối tượng đích với tọa độ robot. 9- Control Box lệnh đọc ảnh từ camera.
10- Control Box lệnh chạy tự động/ Dừng.
Hình 4.43 Giao diện điều khiển trên màn hình cảm ứng khi chưa đọc ảnh từ camera 1 5 7 6 4 3 8 2 9 10
90
Giao diện điều khiển trên thân robot:
Hình 4.44 Giao diện điều khiển trên màn hình cảm ứng khi đọc ảnh từ camera
Hình 4.45 Giao diện điều khiển trên màn hình cảm ứng khi chọn đối tượng đích
91
4.6 NHẬN XÉT
Trong chương này, luận văn đã xây dựng và mô phỏng được hệ thống điều khiển robot di động DDMR. Đã thực nghiệm và ứng dụng được kỹ thuật xử lý ảnh vào điều khiển robot chuyển động tới đích. Cụ thể, luận văn đi sâu phân tích, xây dựng tổ chức phần cứng hệ thống, thiết lập hệ điều hành, môi trường lập trình Android trên board ARM Tiny210, xây dựng chương trình xử lý, điều khiển robot (Phân tích lưu đồ thuật toán và một số chương trình con quan trọng).
Sau khi xây dựng xong chương trình, tác giả tiến hành chạy thực tế với các nội dung nêu trong bài toán: Robot di chuyển đến đối tượng đích theo hình ảnh thu về từ camera.
Hình 4.46 Màn hình cảm ứng và các phím nhấn chức năng điều khiển robot
92
KẾT LUẬN:
Qua thời gian nghiên cứu, thực hiện luận văn, xây dựng và thực nghiệm bài toán điều khiển robot di chuyển đến đích dựa trên công nghệ xử lý ảnh. Học viên đã thu được một số kết quả sau:
- Đã tìm hiểu, nghiên cứu cơ bản về robot di động, xây dựng được mô hình toán học cho robot di động DDMR.
- Đã mô hình hóa và mô phỏng được robot di động DDMR. - Đã tìm hiểu, nghiên cứu cơ bản về công nghệ xử lý ảnh.
- Sử dụng được thư viện mã nguồn mở OpenCV, đã nhúng thư viện OpenCV lên một số nguôn ngữ lập trình như Java, C#, VB.Net để làm một số bài toán đơn giản.
- Đã tìm hiểu được hệ điều hành nhúng Android trên nền kiến trúc ARM. - Trên cơ sở những kiến thức nêu trên, tác giả đã tiến hành xây dựng thực tế một robot DDMR, xử lý và nhận dạng ảnh dựa trên thư viện mã nguồn mở OpenCV. - - Robot có khả năng tự động di chuyển đến đối tượng đích đã chọn và chuyển động bám theo đối tượng đích.
Tuy nhiên, đây là một đề tài khó cùng với việc kiến thức cũng như thời gian của học viên còn hạn hẹp nên mô hình thực nghiệm mới chỉ giải quyết được bài toán đưa robot chuyển động đến đích thông qua kỹ thuật xử lý ảnh dựa trên các thuật toán đơn giản tích hợp trong vi điều khiển. Các nội dung giải quyết bài toán tối ưu, các tình huống ngẫu nhiên trong quá trình robot di chuyển sẽ được tiếp tục hoàn thiện trong thời gian tới.
Như đã trình bày trong luận văn, đây là một hướng nghiên cứu mới và đang được nhiều tổ chức, cá nhân quan tâm nghiên cứu, ứng dụng và phát triển, tuy nhiên luận văn này mới chỉ đi sâu phân tích, làm rõ, xây dựng mô hình thử nghiệm một số nội dung cơ bản nhất trong xử lý ảnh và điều khiển robot.
KIẾN NGHỊ:
93 phát triển cho luận văn như sau:
- Tối ưu các thuật toán điều khiển để robot có khả năng chạy nhanh hơn, ổn định và chính xác hơn.
- Bổ xung thêm các thuật toán xử lý ảnh để nâng cao chất lượng ảnh thu từ camera, bổ xung các bộ lọc (Kalman) kết hợp với việc bám bắt đối tượng để xử lý chính xác hơn đối tượng đích.
- Bổ xung các cảm biến dòng điện và cảm biến tốc độ để robot hoạt động ổn định và chính xác hơn.
94
TÀI LIỆU THAM KHẢO TIẾNG VIỆT
1. Bùi Quốc Khánh, Phạm Quốc Hải, Nguyễn Văn Liễn, Dương Văn Nghi (1999),
Điều chỉnh tự động truyền động điện, Nhà xuất bản Khoa Học và Kỹ Thuật, Hà Nội.
2. Nguyễn Thiện Phúc (2002), Robot công nghiệp, Nhà xuất bản Khoa Học và Kỹ Thuật.
3. Nguyễn Phùng Quang (2004), Matlab và Simulink dành cho kỹ sư điều khiển tự động, Nhà xuất bản Khoa Học và Kỹ Thuật, Hà Nội.
4. Nguyễn Mạnh Tiến (2007), Điều Khiển Robot công nghiệp, Nhà xuất bản Khoa Học và Kỹ Thuật, Hà Nội.
5. Lương Mạnh Bá, Nguyễn Thanh Thủy (2007), Nhập môn xử lý ảnh, Nhà xuất bản Khoa Học và Kỹ Thuật, Hà Nội.
6. JAE S. LIM, Nguyễn Văn Ngọ dịch(2001), Giáo trình xử lý ảnh, Đại Học Quốc Gia, Hà Nội.
7. Nguyễn Mạnh Tiến (2010),”Hệ Thống Điều Khiển Vị Trí Robot Bền Vững Theo Nhiễu”, Tạp Chí Khoa Học & Công Nghệ Các Trường Đại Học Kỹ Thuật, số 76-2010.
TIẾNG ANH
8. Gary Bradski and Adrian Kaehler (2008), Learning OpenCV, O’Reilly Media. 9. Gary R. Bradski (2005) “Computer Vision Face Tracking For Use in a
Perceptual User Interface”, Microcomputer Research Lab, Santa Clara, CA, Intel Corporation.
10. David A. Forsyth & Jean Ponce (2003), “Computer Vision a Modern Approach”, Prentice Hall PTR.
11. Roland Siegwart and Illah R. Nourbakhsh (2004), “Introduction to Autonomous Mobile Robots”, The MIT Press Cambridge, Massachusetts, London, England. 12. Dhaouadi R, Hatab AA (2013), “Dynamic Modelling of Differential-Drive
Mobile
Robots using Lagrange and Newton-Euler Methodologies: A Unified Framework”. Advances in Robotics & Automation.
95 PHỤ LỤC 1 CHƯƠNG TRÌNH XỬ LÝ ẢNH package hlapp.tiny4412.caohoc2016; import android.graphics.Bitmap; import android.os.AsyncTask; import android.util.Log; import com.friendlyarm.AndroidSDK.HardwareControler; import com.serenegiant.usb.UVCCamera; import org.opencv.android.Utils; import org.opencv.core.Core; import org.opencv.core.CvType; import org.opencv.core.Mat; import org.opencv.core.Point; import org.opencv.core.Rect; import org.opencv.core.Scalar; import org.opencv.imgproc.Imgproc;
public class ImgProcessing extends AsyncTask<String, Integer, String> {
private static final String TAG = "Image Processing";
public int ShowTouch = 0;
//Obj tracking - BlobDetector
public boolean mIsColorSelected = false;
public ColorBlobDetector mDetector;
public Point ObjPoint = new Point(10, 10); public double ObjArea = 0;
//Img - Mat
Bitmap bmShow, bmHSV;
Mat matCamera, matHSV, matPyrDown;
int CountNoDetect = 0;
//Color
Scalar colorRed = new Scalar(255, 0, 0); Scalar colorGreen = new Scalar(0, 255, 0); Scalar colorYellow = new Scalar(255, 255, 0);
96 //Line Debug
Point lineDebug10 = new Point(128, 0); Point lineDebug11 = new Point(128, 480);
Point lineDebug20 = new Point(256, 0); Point lineDebug21 = new Point(256, 480);
Point lineDebug30 = new Point(384, 0); Point lineDebug31 = new Point(384, 480);
Point lineDebug40 = new Point(512, 0); Point lineDebug41 = new Point(512, 480);
long timeProcess = 0;
@Override
protected void onPreExecute() { //Bitmat return
bmShow =
Bitmap.createBitmap(UVCCamera.DEFAULT_PREVIEW_WIDTH,
UVCCamera.DEFAULT_PREVIEW_HEIGHT, Bitmap.Config.ARGB_8888); bmHSV =
Bitmap.createBitmap(UVCCamera.DEFAULT_PREVIEW_WIDTH/4,
UVCCamera.DEFAULT_PREVIEW_HEIGHT/4, Bitmap.Config.ARGB_8888);
//Mat Processing
matCamera = new Mat(UVCCamera.DEFAULT_PREVIEW_WIDTH, UVCCamera.DEFAULT_PREVIEW_HEIGHT, CvType.CV_8UC4);
matPyrDown = new Mat(); matHSV = new Mat();
mDetector = new ColorBlobDetector(); super.onPreExecute();
}
int MinKhoangCach = 5000; @Override
protected String doInBackground(String... arg0) {