Robot Programming Tutorial

7
Hướng dẫn lập trình cho robot tự động (căn bản) sử dụng mạch BKFET và thư viện chuẩn hóa do clb BKACE viết tháng 11/2011 Các bạn đang đọc tài liệu hướng dẫn về cách lập trình 1 chương trình cơ bản cho robot tự động. Với nền tảng sử dụng mạch của BKFET và bộ thư viện chuẩn hóa của clb BKACE, được viết bởi 2 thành viên CLB là Nguyễn Ngọc Giang, CNPM K53 và Vũ Mạnh Cường ĐTVT K54. Bộ khung chuẩn hóa cho các bạn gồm có: - 1 thư mục Library chứa các thư viện chuẩn hóa của CLB, với đuôi .h - 1 thư mục Simulation chứa 1 mạch mô phỏng rút gọn các chức năng chính của mạch robot - 1 file mainTemplate.c chứa đoạn khung chương trình mẫu cho 1 chương trình cơ bản. Sau đây mình sẽ viết về quy trình để bắt đầu lập trình với 1 chú robot từ những bước đầu tiên. Tức là từ khi các bạn được giao lập trình cho con robot đó, với phần cứng robot đã khá hoàn thiện. B1: Tạo 1 project mới. Phần mềm lập trình cho vi điều khiển ở đây, theo chuẩn hóa của CLB là phần mềm AVR Studio, tùy

description

RobotProgrammingTutorial

Transcript of Robot Programming Tutorial

Page 1: Robot Programming Tutorial

Hướng dẫn lập trình cho robot tự động(căn bản)

sử dụng mạch BKFET và thư viện chuẩn hóa do clb BKACE viết tháng 11/2011

Các bạn đang đọc tài liệu hướng dẫn về cách lập trình 1 chương trình cơ bản cho robot tự động. Với nền tảng sử dụng mạch của BKFET và bộ thư viện chuẩn hóa của clb BKACE, được viết bởi 2 thành viên CLB là Nguyễn Ngọc Giang, CNPM K53 và Vũ Mạnh Cường ĐTVT K54.

Bộ khung chuẩn hóa cho các bạn gồm có: - 1 thư mục Library chứa các thư viện chuẩn hóa của CLB, với đuôi .h- 1 thư mục Simulation chứa 1 mạch mô phỏng rút gọn các chức năng chính của mạch robot- 1 file mainTemplate.c chứa đoạn khung chương trình mẫu cho 1 chương trình cơ bản.

Sau đây mình sẽ viết về quy trình để bắt đầu lập trình với 1 chú robot từ những bước đầu tiên. Tức là từ khi các bạn được giao lập trình cho con robot đó, với phần cứng robot đã khá hoàn thiện.

B1: Tạo 1 project mới. Phần mềm lập trình cho vi điều khiển ở đây, theo chuẩn hóa của CLB

là phần mềm AVR Studio, tùy các bạn có thể sử dụng các phiên bản khác nhau, như 4.13, 4.15, 4.18, thậm chí là 5.0. Sự khác biệt ở đây là không nhiều(mình đang nói về mặt tư duy lập trình). Mình thì quen dùng AVR Studio 4.13, có 1 hạn chế nhỏ là nó sẽ bị xung đột với các bộ Office từ 2007 trở đi (đối với máy cài Win7).

Hãy tạo 1 project mới, chọn chip sử dụng ở đây là Atmega128. 1 gợi ý nhỏ cho người mới, đó là hãy quản lý project của các bạn theo từng thư mục. Tức là gói gọn tất cả các file liên quan của project, từ file .c đến các file .aps, .h trong cùng 1 thư mục để dễ quản lý và kiểm tra.

B2: Chèn vào thư viện và code mẫu.

Page 2: Robot Programming Tutorial

Sau khi tạo project xong (hãy đặt tên mang tính gợi nhớ và có ý nghĩa, ví dụ: myFirstProject, testProject,...), hãy copy 2 thư mục Library (thư mục chứa các thư viện chuẩn hóa của CLB) và thư mục Simulation (chứa file mô phỏng rút gọn chức năng của mạch robot) vào cùng thư mục chứa project. Nhớ là phải đặt cùng thư mục với thư mục default, file .aps của project đó, vì nó sẽ ảnh hưởng đến các lệnh #include trong chương trình của các bạn.

Bước tiếp theo, hãy copy đoạn khung chương trình mẫu trong file mainTemplate.c rồi paste vào file .c của project các bạn. Vậy là xong bước thứ 2.

B3: Lập trình cho robot.Bây giờ là khâu quan trọng nhất. Bước này các bạn sẽ phải tự viết

code dựa trên thư viện các hàm đã được chuẩn hóa của clb, làm sao cho con robot tự động của mình đi đúng hành trình mong muốn, và thực hiện hết các nhiệm vụ 1 cách nhanh chóng và chính xác, độ tin cậy cao nhất có thể. Muốn lập trình được, các bạn cần đọc kĩ thư viện để biết cách dùng các hàm, dưới đây mình sẽ nêu ra vài cách sử dụng các hàm thông dụng, mà trong bất cứ chương trình nào cũng cần có.

Page 3: Robot Programming Tutorial

Thứ nhất, về cấu trúc thư viện. Thư viện chia làm 3 lớp:

- Lớp 1: lớp cơ bản Basic. Bao gồm các hàm cơ bản, liên quan nhiều đến phần cứng, đòi hỏi người lập trình phải có kiến thức về mạch, cũng như biết cách sử dụng mạch robot. Ở đây có các hàm khai báo chân vi điều khiển, cấu hình đầu ra/vào cho các port, thư viện ADC, LCD, điều khiển động cơ, kiểm soát encoder,... Nhìn chung, với người mới lập trình, hoặc chưa có kiến thức về mạch, không cần thiết lắm phải sửa chữa hay thêm bớt gì trong thư viện này, chỉ cần đọc thuộc tên hàm và biết cách áp dụng là được, ngoại trừ thay đổi và chỉnh sửa các biến toàn cục trong global.h để phù hợp với robot cũng như sân thi đấu.

- Lớp 2: lớp ứng dụng Application. Bao gồm các hàm ứng dụng thư viện cơ bản ở trên. Các hàm chuyển động, hàm test, hàm thực hiện các nhiệm vụ, đều nằm ở đây. Do chưa đi vào nhiệm vụ của robot trong cuộc thi Robocon năm nay, nên mình chưa viết thư viện Duty.h, thư viện khai báo các hàm thực hiện 1 số nhiệm vụ của robot, như lấy quà, thả quà, vươn ra, thu vào, nâng lên, hạ xuống,... Người lập trình sẽ thao tác nhiều với thư viện này, bằng việc chỉnh sửa các hàm di chuyển sao cho phù hợp với con robot của mình.

- Lớp 3: lớp thi đấu Compete. Bao gồm menu và các hàm hành trình cho robot, chỉ nhằm mục đích phục vụ cho thi đấu trong cuộc thi Robocon. Hiện tại chưa có các thư viện hành trình cho sân đỏ và sân xanh. Hãy thêm các item cho menu theo ý muốn.

Với cấu trúc như vậy, chúng ta có thể thấy rõ ràng, người lập trình sẽ thao tác chủ yếu với chương trình chính (nơi “sắp xếp” các hàm trong thư viện thành 1 quá trình để robot thực hiện theo). Việc chỉnh sửa thư viện chủ yếu với file global.h của Basic, với lớp Application và Compete. Còn bây giờ mình sẽ nói đến 1 số quy trình phải làm khi bắt tay vào lập trình 1 chú robot mới ra lò. Các bạn nên đưa vào vòng while(1) của hàm main hàm MENU(). Đây là hàm cho phép các bạn thao tác với các ứng dụng của thư viên thông qua giao diện 1 menu, rất tiện cho chúng ta thao tác nhiều chức năng mà không cần viết nhiều hàm. Hãy bắt đầu 1 chương trình đơn giản như thế. Và khi đã ôm robot rồi, các bạn nên làm theo các bước sau:

Page 4: Robot Programming Tutorial

- B1: Hãy test thử các thành phần của robot để biết xem nó có hoạt động tốt không, phần nào bị hỏng, phần nào hoạt động không theo ý, để còn có biện pháp sửa chữa, thay mới.

Sử dụng các hàm TEST, được định nghĩa trong test.h, với test bàn phím, test sensor, test động cơ, test encoder. Đó là 1 số thành phần không thể thiếu của robot. Nếu 1 trong số chúng hỏng, bạn sẽ khó mà lập trình được cho robot của bạn thực hiện đúng nhiệm vụ. Test xong xuôi, nếu ok chuyển sang bước 2, nếu chưa được, hãy sửa ngay. Nên nhớ, công việc này quyết định khá nhiều đến độ ổn định và tính chính xác của robot, hãy là 1 người cẩn thận và cần cù khi lập trình robot.

- B2: Công đoạn quan trọng với 1 chú robot tự động chạy trên sân thi đấu: lấy ngưỡng. Hẳn các bạn đã biết robot chúng ta chủ yếu chạy theo vạch trắng trên nền sân thi đấu, vì vậy, để chúng phân biệt được vạch/nền, cần phải đưa ra 1 ngưỡng ADC cụ thể, thường là ở giữa mức nền và vạch. Lớn hơn mức đó thì coi là nền, nhỏ hơn thì là vạch. Hãy sử dụng hàm SENSOR_AutoGetLevel() (cũng có trong MENU())để công việc trở nên đơn giản. 1 lần lấy mẫu trong vạch, 1 lần lấy mẫu ngoài nền là đủ. Nếu cẩn thận, hãy lấy nhiều lần trong vạch và ít lần ngoài nền (sau này sẽ hiểu vì sao :D). Ngưỡng sẽ được lưu vào EEPROM để các bạn không cần lấy lại ngưỡng cho các lần chạy tiếp theo trên cùng 1 mặt sân.

- B3: Sau khi lấy được ngưỡng, coi như là robot của chúng ta đã phân biệt được vạch nền, giờ là đến công đoạn chỉnh sửa các thông số sao cho nó đi được theo vạch, mà không bị văng ra ngoài, hay đi quá giật, hoặc đi hình sin.Hãy chỉnh giá trị tốc độ ở các mảng tốc độ trong global.h. Cần đặc biệt quan tâm đến 3 giá trị đầu tiên. Phần tử thứ nhất là giá trị vận tốc khi xe đi thẳng, phần tử thứ 2 là giá trị để 1 bên bánh chạy chậm lại khi xe lệch vạch 1 con led. Sửa giá trị này để xe điều chỉnh được tốt, không đánh bánh mạnh quá mà cũng không yếu quá.

Việc cấp cho 2 bánh cùng 1 độ rộng xung cho chúng đi thẳng được là 1 điều viển vông. Thứ nhất, với 1 cặp động cơ chợ Trời, với 1 kết cấu cơ khí gia công bằng tay, không bao giờ đảm bảo cho chúng chạy được với vận tốc bằng nhau. Thứ hai, nếu có chạy thẳng được, cũng không ai đảm bảo cho bạn nó sẽ bám theo vạch, bởi vạch cũng đâu có thẳng :D không gì là tuyệt đối cả, nên hãy làm tương đối, vừa chạy vừa điều chỉnh là phương án tối ưu. Tất nhiên giảm thiểu số lần điều chỉnh là hay nhất, vì khi đó xe sẽ chạy thẳng hơn với 1 vận tốc tốt nhất. Vì vậy phần tử thứ 2 của mảng tốc độ là rất quan trọng. Có thể điều chỉnh thẳng trong code trước khi nạp cho lần chạy tiếp theo. Nhưng đây là cách khá thủ công và gây nhiều bất tiện. Hãy sử

Page 5: Robot Programming Tutorial

dụng cách thứ 2, đó là dùng hàm INIT_EditSpeed(), có trong MENU() với tên “Chinh van toc”. Giá trị phần tử thứ 2 sẽ được lưu vào EEPROM nên không cần phải chỉnh lại khi reset chip hoặc tắt nguồn.

Trên đây là 3 bước cơ bản khi mới bắt tay vào lập trình cho robot. Còn muôn vàn những khó khăn hay những sự điều chỉnh và thuật toán nảy sinh trong quá trình thực hiện nhiệm vụ cho robot. Mình sẽ đề cập đến trong 1 vài bài viết tiếp trên diễn đàn. Các bạn hãy chủ động đọc, hiểu và làm việc được với bộ thư viện đang có trong tay, kinh nghiệm sẽ được tích lũy dần qua năm tháng, đừng vội vàng. Hãy trang bị những đức tính cần thiết cho 1 người lập trình robot tự động: cần cù, cẩn thận, cầu toàn và biết lắng nghe.

Chúc các bạn thành công !