Mô hình thiết kế Robot NT
[Giới thiệu]
Đây là dòng Robot mới được thiết kế dành riêng cho thi đấu Robocon . Mà sắp tới là cuộc thi Robocon Việt Nam 2007 .Đây là dòng Robot mới với khả năng hoạt động gần như tự động và xem như là “thông minh” nhờ các giải thuật AI được nhúng vào .Cũng như khả năng tái sử dụng ,chạy được trên nhiều loại Vi điều khiển .Hỗ trợ cấu hình ,xây dựng chiến thuật bằng phần mềm trên PC.
[Tính năng Robot NT] :
- Khả năng dò tìm đường đi đến mục tiêu tự động ,khác với cách truyền thống là phải lập trình trước lộ trình di chuyển đến mục tiêu ,quá mất công ,nhất là khi thay đổi chiến thuật .
- Ở cấp sử dụng mình chỉ quan tâm việc lập danh sách thứ tự các mục tiêu để yêu cầu cho Robot thực hiện.Sau đó Robot NT sẽ tự động biết phân giải các yêu cầu trên và lần lượt thực hiện chúng một cách tự động .
- Xây dựng chiến thuật được hỗ trợ bởi phần mềm Với giao diện "kéo thả" chuột trên 1 giao diện đồ họa mô phỏng sân thi đấu .Sau khi thao tác và nhấp OK ,Robot NT sẽ thực thi trên sân thi đấu thật giống y như bạn vừa làm trên màn hình của phần mềm .
- Khả năng tránh vật cản nếu trong quá trình di chuyển Robot đụng phải .Sử dụng cơ chế Time out hoặc Encoder để nhận biết vật cản ,sau đó chạy lại Giải thuật tìm đường để đi con đường khác .
- Trường hợp tất cả các đường đến mục tiêu đều bị đối phương chặn ,khi đó Robot NT phải có khả năng tìm một mục tiêu khác để thay thế nhờ khả năng suy diễn và tìm kiếm mục tiêu mới hợp lý để thay thế .
- Tương tự với trường hợp trên ,khi Robot NT đã tìm được đến mục tiêu nhưng không thể thực hiện được yêu cầu (ví dụ đến lấy quà mà ở vị trí đó không có quà) ,thì nó cũng phải biết cách tìm đến mục tiêu khác để thực hiện .
- Khả năng triển khai trên nhiều loại Vi điều khiển ,chỉ phụ thuộc vào các giải thuật yêu cầu bao nhiêu Ram và độ phức tạp của giải thuật để chọn lựa phần cứng đủ đáp ứng hay không.Phiên bản hiện tại phát triển hỗ trợ biên dịch cho 3 loại Vi điều khiển : PIC , P89 và H8 .Các VĐK khác cũng có thể triển khai miễn là hỗ trợ Ansi C .
- Khả năng kết nối với PC để cấu hình và điều khiển (COM hoặc USb tùy VĐK bạn đang dùng) .Điều này cho phép thay đổi thông số (như tốc độ,bộ so sánh adc,encoder,...) Robot NT cũng như thay đổi chiến thuật rất dễ dàng trước lúc thi đấu mà không cần mất công "sửa code - biên dịch - nạp ". Đồng thời mở ra khả năng dùng các ngôn ngữ cấp cao C++,Java,C#,VB,… để điều khiển Robot NT .
[Yêu cầu phần cứng]
- Bạn không cần quan tâm quá nhiều về phần cứng của mình ,Robot NT có thể triển khai trên nhiều VĐK mà không cần sữa đổi nhiều (mã giải thuật chính viết bằng Ansi C) .Yêu cầu quan trọng nhất là Ram của VĐK tối thiểu 1KB ,nếu là 512B thì bạn phải chấp nhận khai báo Disable một số giải thuật và tính năng ,như vậy chấp nhận Robot NT sẽ bớt "thông minh" .
- Đồng thời trước khi biên dịch mã nguồn yêu cầu tối thiểu bạn phải khai báo loại VĐK đang sử dụng và và cấu hình chân kết nối .
- Do đó bạn có thể tự do chọn lựa và thiết kế mạch ,quan trọng là khai báo trước khi biên dịch là OK .Khỏi mất công tranh cải nhau về cách thiết kế cũng như sử dụng chip như một số bài post trong diễn đàn .
[Thông tin phát triển]
Phiên bản hiện tại đã biên dịch và chạy OK trên PIC với sân thi đấu thực ,còn P89 đang trong giai đoạn kiểm tra tương thích mã .
Không biết nhóm nào làm trên AVR hay VĐK khác sẵn lòng cho bọn mình test không nhỉ ,hi hi...
[Hỗ trợ kỹ thuật và Mã nguồn]
- Đây là dòng Robot thiết kế Open for Every one .để có thông tin về mã nguồn cũng như các kỹ thuật cần thiết để xây dựng một Robot NT .
- Khi có bản hoàn chỉnh Full chúng tôi mới chính thức Public lên web .Còn bây giờ vẫn đang test .Nếu các bạn muốn khám phá và xậy dựng dòng Robot NT này thì liên hệ và cùng phát triền cùng chúng tôi .
(*) Robot NT đã đăng bài về mô tả cách hiện thực giải thuật trên báo Tự động hóa ngày nay ,số tháng 12-2006
Phần 1 : Thiết kế ý niệm .
Phần 2 : Hiện thực code cho VĐK . (đang tổng hợp)
Phần 3 : Thiết kế phần mềm điều khiển trên PC . (đang tổng hợp)
Phần 1 : Thiết kế ý niệm .
- Giải pháp thiết kế NT :
+) Xem Robot như là một đối tượng lập trình bao gồm :
- Dữ liệu : là trạng thái trên sân thi đấu ,giá trị của sensor ,encoder .
- Tác vụ : là tập hợp các hành động cơ bản mà Robot có thể làm được như : chạy tới ,chạy lui ,rẽ trái ,rẽ phải ,đí thẳng ,…
+) Mô hình hóa sân thi đấu thập giác thành một ma trận 20 x 6 các node (hay điểm) .
+) Đối tượng Robot sẽ di chuyển và xử lý tác vụ trên sân thi đấu này ,cùng với việc xử lý dữ liệu là trạng thái trên sân .
+) Nhúng giải thuật AI tìm đường tối ưu và giải thuật xử lý sự kiện cho Robot ,để có được đường đi tốt nhất trên sân thi đấu khi di chuyển từ điểm này đến điểm kia và xử lý các tình huống ngoại lệ (ví dụ như va chạm) .
+) Phân chia và Module hóa các khối trên Robot ,để hạn chế sự phụ thuộc vào phần cứng ,có thể dùng lại hay thiết kế sữa lỗi nhanh chóng .Do đó có thể lựa chọn bất cứ vi điều khiển MCU hay Chip nào ,miễn là có thể đáp ứng được các Module kết nối với nó .Các thành viên sẽ tự do trong việc chọn môi trường lập trình .
+) Sự can thiệp của con người vào Robot tự động chỉ có tính chiến lược ,còn lại Robot sẽ tự quyết định đường đi ,lựa chọn tác vụ ,… để hoàn tất yêu cầu .
+) Quá trình xây dựng các thành phần Robot : lập trình ,mạch phần cứng ,cơ cấu cơ khí phải triển khai đồng bộ với nhau và chúng có tác động rất lớn với nhau .Sự hoàn thiện của phần này là tiến đề để xây dụng cho phần khác .
+) Có cơ chế hiển thị và Debug lỗi qua các giao tiếp Led/LCD hay với PC .
- Ý tưởng đối tượng hóa Robot :
+) Trước khi thiết kế Robot BKIT xem như ta đã có một con Robot có thể thực hiện được các tác vụ cơ bản :
- Dò line
- Đi thẳng
- Đi lui
- Rẽ trái
- Rẽ phải
- Lấy quà
- Giữ quà
- Bỏ quà
+) Các tác vụ trên có thể được xây dựng bằng những thừa kế từ các năm trước .Do đó vấn đề hiện thực các tác vụ này không phải là vấn đề quá quan trọng .
+) Các bộ phận cảm biến gắng trên Robot như : Sensor ,Encoder cho phép nó tham khảo trạng thái bên ngoài ,và nó sẽ cập nhật trạng thái đó cho phần dữ liệu sẽ được xử lý .Yêu cầu tính chính xác cao ,và phải có cơ chế lọc và loại nhiễu có thể bằng phần cứng hay phần mềm .
+) Giải thuật xử lý mang yếu tố quyết định đến tính “thông minh” và hiệu quả làm việc của Robot .Bao gồm giải thuật tìm đường đi tối ưu ,tránh vùng cấm và giải thuật xử lý sự kiện .
- Mô hình hóa sân thi đấu thành ma trận :
+) Sân thi đấu Robocon 2007 là một hình thập giác đều ,có thêm 10 cạnh xen kẽ . Do đó ta hoàn toàn có thể biễu điễn sân thi đấu này thành một cấu trúc dữ liện là một ma trận các node (hay điểm) 20 x 6 .
+) Việc đánh tọa độ cho các node được quy ước là tọa độ xuất phát của Robot là gốc ,xoay theo chiều ngược kim đồng hồ là chiều dương của X ,di chuyển về tâm của sân là chiều dương của Y .
+) Với đặc điểm của sân nên dẫn đến các node có sự khác biệt về khoảng cách giữa 2 node liên tiếp với nhau theo chiều X ,khoảng cách này ngắn dần khi gần về tâm .Nhưng giữa 2 node kế tiếp cùng theo chiều X hay Y thì vẫn bằng nhau .
+) Cấu trúc dữ liệu của một node bao gồm 4 thành phần : mã của node (thay cho 2 tọa độ x,y để ít tốn bộ nhớ) ,kiểu của node để biết đó là loại node gì (của mình,của đối phương hay vật cản),xw chiều dài cạnh khi di chuyển đến node kế tiếp theo chiều X,yw chiều dài cạnh khi di chuyển đến node kế tiếp theo chiều Y .
+)Dưới đây là mô tả cấu trúc của sân thi đầu với C :
+) Việc xác định kiểu của một node (hay điểm) trên sân có thể thiết lập ngay từ ban đầu ,và Robot có thể cập nhật thêm các node có vật cản khi Robot đụng phải nó.
+) Giải thuật tìm đường đi và chiến thuật của Robot phụ thuộc nhiều vào các node này ,bởi vì Robot phải tránh đi ngang qua các node này ,và phải có tác vụ xử lý cho từng loại node mà nó “biết” .
+) Khi gặp một vật cản chưa biết khi di chuyến trên sân Robot sẽ cập nhật node hiện tại có vật cản ,đồng thời chạy lại giải thuật tìm đường để di chuyển theo hương khác tránh vật cản .
- Kiến trúc và quan hệ giữa các Module :
+) Phân lớp hướng tới độc lập Vi điều khiển ;
- Lớp chương trình giải thuật chỉ gọi và truy xuất Vi điều khiển thông qua lớp trung gian .
- Lớp chương trình giải thuật sinh ra chuổi điều khiển Robot cũng theo quy tắc trên .
- Lớp Vi điều khiển là hiện thực của lớp trung gian trên một Vi điều khiển và mạch Robot cụ thể .
- Hai lớp trên cùng viết bằng Ansi C để đảm bảo tính tương thích với nhiều thư việc biên dịch C .
+) Lưu đồ giải thuật hoạt động:
+) Đối tượng Robot thiết kế bao gồm nhiều thành phần dữ liệu và tác vụ ,giữa chúng có mối quan hệ lẫn nhau :
- Action Table : chính là tập các tác vụ cơ bản mà Robot có thể thực hiện được .
- Game Field : là cấu trúc sân thi đấu ,với các node trân sân .
- Robot : là “đối tượng” mà ta đang hiện thực .
- Goal Node : là danh sách chứa các node mà ta cần tới để thực hiện một tác vụ nào đó (như gắp quà ,bỏ quà ,cản phá ,…).
- Action List : là danh sách tuần tự các tác vụ mà Robot sẽ thực hiện ,danh sách này được tao ra do giải thuật tìm đường sinh ra .Đó chính là các tác vụ thực hiện để hoàn tất từ Goal node này tới Goal node tiếp theo .
- Searching : là giải thuật tìm đường ,cho Robot từ 2 Goal node trong danh sách Goal node của Robot .Quá trình tìm kiếm sẽ lặp lại khi Robot gặp vật cản .
- Processing : Quá trình xử lý dữ liệu và tác vụ cho Robot .
- LED/LCD : để hiển thị kết quả v2 debug .
- Sensor : quản lý và đọc Sensor
- Motor : điều khiển động cơ .
Quan hệ giữa các Module
- Quy ước hướng :
+) Để thuận tiện cho lập trình các hướng của Robot được quy ước thống nhất . Có 2 loại hướng cần quan tâm :
- Hướng di chuyển : để xác định Robot đang đi theo chiều X hay Y, và hướng âm hay dương . Dựa vào hướng này để Robot cập nhật tọa độ mà nó đang đứng .
- Hướng của tác vụ : cho biết thong tin về tác vụ Robot đang thực hiện . Thông tin này sẽ giúp quá trình di chuyển của Robot được chính xác .
+) Vì sân có tính vòng và đối xứng nên các giải thuật phải giải quyết vấn đề đó .Ví dụ đi từ (0,0) tới (18,2) tương đương quảng đường đi từ (0,0) tới (2,2) .
- Giải quyết bài toán tìm đường đi trên sân:
+) Tác vụ này của Robot được thực hiện khi cần tìm đường di chuyển từ node này đến node kia trên sân và khi Robot gặp vật cản trên sân khi thi đấu giúp Robot tìm ra đường khác để đi .
+) Giải thuật AI tìm đường phải đàm bảo các yếu tố :
- Ít tốn bộ nhớ ,vì bộ nhớ của vi điều khiển rất hạn chế.
- Thời gian chạy ngắn vì tốc độ vi điều khiển và khả năng đáp ứng nhanh với sự kiện trên sân .
- Tránh được các node cấm đi ngang mà vẫn đảm bảo đường đi là ngắn nhất .
- Chỉ được các tác vụ cho Robot khi đi qua các node trong kết quả tìm kiếm (như đi thẳng hay rẽ trái ,rẽ phải ,…).
+) Giải pháp tìm đường bằng node trung gian hướng về tâm có thể đáp ứng bài toán này .
+) Việc sử dụng giải thuật nào phụ thuộc rất nhiều vào khả năng bộ nhớ mà Vi điều khiển có thể đáp ứng .Giải thuật cáng tốt ,robot càng thong minh thì bộ nhớ Ram yêu cầu càng nhiều .Do đó bạn phải cân bằng được 2 yếu tố này để có kết quả tốt nhất .
Kết quả tìm kiếm sinh ra danh sách các Node trung gian và
Tác vụ kèm theo .
Lược đồ của quá trình di chuyển từ Node bắt đầu cho tới Node đích
Can thiệp đường đi cũa Robot .
- Giải quyết bài toán suy luận tìm mục tiêu mới:
+) Đối với mỗi đội thì các tập này sẽ khác nhau ,nhưng nó thường cố định nên ta có thể lưu trước vào chương trình .
+) Trong quá trình hoạt động trên sân Robot NT sẽ cập nhật thêm một số điểm “có vấn đề ” ,do đó giải thuật phải bỏ qua các điểm này để tăng xác suất thành công cho kết quả .
- Phân tích tọa độ di chuyển của Robot:
+) Với phương pháp đối tượng hóa Robot và tọa độ hóa sân thi đấu thì tọa độ hiện tại của Robot là dữ liệu quyết định sự vận hành đúng đắn của Robot .
+) Với hướng di chuyển như đã quy ước ở phần trên thì khi Robot đứng tại một điểm nào đó trên sân ,dự vào vector chỉ hướng của Robot ta có thể dễ dàng cập nhật tọa độ mới cho Robot .
+) Ta có 4 hướng di chuyển chính khi Robot đứng tại một điểm trên sân .
Các hướng di chuyển của Robot tại một điểm
- Thực hiện tác vụ tại đích đến :
+) Mục đích của Robot khi di chuyển từ Goal node này đến Goal node khác là để thực hiện một tác vụ nào đó tại node đến .Chúng ta có thể không cần quan tâm làm thế nào và đường đi nào để Robot tới đích ,Robot sẽ tự tìm đường và xử lý chuyện đó.Điều chúng ta quan tâm là khi tới đích Robot sẽ phải hoàn tất một nhiệm vụ nào đó .
+) Trong quá trình di chuyển tới node đích Robot sẽ đi ngang qua các node trung gian trên đường đi ,nó cũng sẽ thực hiện một số tác vụ nào đó do giải thuật tim kiếm sinh ra ,đảm bảo cho Robot di chuyển đến đúng tọa độ đích .
+) Cơ chế xác định một tác vụ không thành công có thể sử dụng Time out hay Công tắc ,…
- Lựa chọn Vi điều khiển :
+) Các chip và vi điều khiển đáp ứng được giao liếp với các Module đã thiết kế đều có thể sử dụng được .
+) Yêu cầu bộ nhớ Ram của MCU đủ lớn (tối thiểu 1KB) để xử lý các giải thuật .
+) Lựa chọn vi điều khiển,thư viện và môi trường lập trình tùy vào từng Robot và thế mạnh lập trình của các thành viên để lựa chọn .
+) Các dòng vi điều khiển thông dụng là MC51,AVR và PIC đều có thể đáp ứng được yêu cầu này .
- Giao tiếp máy tính :
+) Tùy vào Vi điều khiển để chọn lựa giao tiếp COM hay USB .
+) Bạn phải hiện thực module sử dụng EEPROM của Vi điều khiển nếu muốn sử dụng khả năng cấu hình từ PC .
+) Hiện thực một Module đồ họa vẽ lại sân thi đấu ,hỗ trợ khả năng kéo thả đối tượng Robot NT như thiết kế ở trên .Vớ mỗi mục tiêu chúng ta cần lưu lại thong tin vào một danh sách ,sau đó gởi yêu cầu ra giao tiếp để l
..........................................
Code Vi điều khiển cho Robot NT
- Mô tả đối tượng Robot :
/////////////// cau truc cua Robot
struct Robot
{
unsigned int dir; //Huong hien tai cua Robot
///////////////////
unsigned int x,y; //Toa do (x,y)
////////////// Danh sach cac dich den
struct RobotGoalAction goal[MAX_GOAL_ACTION];
unsigned int countGoalAction;
unsigned int currentGoalAction;
//////////////// Danh sach cac tac vu cua Robot
...................................................
} ;
+) Tại mọi thời điểm ta luon có thể biến vị trí va tọa độ hiện thời của Robot NT bằng cách đọc từ biến dir và x,y .
+) Mục tiêu yêu cầu Robot NT thực hiện được chứa trong goal[] .Robot sẽ lần lượt thực hiện từng mục tiêu .Còn goal[] có thể được nạp từ code chương trình hay bằng đọc cấu hình trong EEPROM ,tùy vào chế độ hoạt động của Robot hiện tại .
+) Chuổi action[] là nơi chứa danh sách Robot phải thực thi, tại mọi thời điểm ,robot luôn dọc trong action[] .Cứ thấy có action thì thực hiện .Vậy nên phải quản lý chặt action[] ,nếu không robot se dễ chạy sai .
+) Các giải thuật xử lý luôn sinh ra kết quả và đẩy vào chuỗi action[] cho Robot NT thực hiện .
- Mô tả sân thi đấu :
+) Thay vì lưu toàn bộ sân thi đấu 6x20 điểm tốn quá nhiều bộ nhớ ,ta có thể chỉ lưu thong tin về một số điểm đặc biệt mà ta quan tâm ,và một số phương thức truy cập điểm đó .
+) Thông tin các điểm có thể ghi 1 điểm .
static unsigned int GOAL_1_POINT[10];
///////////////////////////////////////
void initGoal1Point()
{
GOAL_1_POINT[0]=xyToId(1,0);
GOAL_1_POINT[1]=xyToId(3,0);
GOAL_1_POINT[2]=xyToId(5,0);
GOAL_1_POINT[3]=xyToId(7,0);
GOAL_1_POINT[4]=xyToId(9,0);
GOAL_1_POINT[5]=xyToId(11,0);
GOAL_1_POINT[6]=xyToId(13,0);
GOAL_1_POINT[7]=xyToId(15,0);
GOAL_1_POINT[8]=xyToId(17,0);
GOAL_1_POINT[9]=xyToId(19,0);
}
+) Thông tin các điểm có thể ghi 2 điểm .
static unsigned int GOAL_2_POINT[5];
void initGoal2Point()
{
GOAL_2_POINT[0]=xyToId(1,2);
GOAL_2_POINT[1]=xyToId(5,2);
GOAL_2_POINT[2]=xyToId(9,2);
GOAL_2_POINT[3]=xyToId(13,2);
GOAL_2_POINT[4]=xyToId(17,2);
}
+) Thông tin các điểm có thể ghi 3 điểm .
static unsigned int GOAL_3_POINT[5];
void initGoal3Point()
{
GOAL_3_POINT[0]=xyToId(1,5);
GOAL_3_POINT[1]=xyToId(5,5);
GOAL_3_POINT[2]=xyToId(9,5);
GOAL_3_POINT[3]=xyToId(13,5);
GOAL_3_POINT[4]=xyToId(17,5);
}
+) Kiểm tra một điểm có thể đi qua được hay không .
unsigned int isNoEntryNode(unsigned int node_id)
{
int i;
for(i=0;i<5;i++){
if(GOAL_3_POINT[i]==node_id)
return 1;
}
for(i=0;i<5;i++){
if(GOAL_2_POINT[i]==node_id)
return 1;
}
for(i=0;i<10;i++){
if(GOAL_1_POINT[i]==node_id)
return 1;
}
return 0;
}
+) Thông tin các điểm có thể lấy quà bên đỏ .
static unsigned int RED_PICKUP_GOAL[5];
////////////////////////////////////
void initRedPickupGoal()
{
RED_PICKUP_GOAL[0]=xyToId(0,0);
RED_PICKUP_GOAL[1]=xyToId(2,0);
RED_PICKUP_GOAL[2]=xyToId(18,0);
RED_PICKUP_GOAL[3]=xyToId(16,0);
RED_PICKUP_GOAL[4]=xyToId(14,0);
}
+) Thông tin các điểm có thể lấy quà bên xanh .
static unsigned int GREEN_PICKUP_GOAL[5];
void initGreenPickupGoal()
{
GREEN_PICKUP_GOAL[0]=xyToId(4,0);
GREEN_PICKUP_GOAL[1]=xyToId(6,0);
GREEN_PICKUP_GOAL[2]=xyToId(8,0);
GREEN_PICKUP_GOAL[3]=xyToId(10,0);
GREEN_PICKUP_GOAL[4]=xyToId(12,0);
}
+) Quản lý các điểm gặp lỗi khi robot di chuyển .
static unsigned int NODE_ERROR[10];
static unsigned int node_error_count=0;
void insertNodeEror(unsigned int node_id)
{
NODE_ERROR[node_error_count++]=node_id;
}
unsigned int searchInErrorNode(unsigned int node_id)
{
unsigned int i;
for(i=0;i<node_error_count;i++){
if(NODE_ERROR[i]==node_id)
return 1;
}
return 0;
}
- Lớp trung gian : Sensor
+) Nhằm tránh sự phụ thuộc của chương trình vào việc có sử dụng ADC hay dung IC Comparartor ,lớp trung gian này sẽ giúp chương trình khác truy cập Sensor một cách độc lập .
unsigned int8 robotnt_read_sensor()
{
#ifndef _89_MCU
return robotnt_read_adc();
#else
return robotnt_read_comp();
#endif
}
- Lớp trung gian : Speed
+) Quá trình điều khiển động cơ thông qua các hàm bên dưới .Với mỗi VĐK có cơ chế điều xung riêng ,vậy nên khi hiện thực cũng sẽ khác nhau .Lớp speed này giúp trừu tượng hóa quá trình điều khiển động cơ .
//////////// Thiet dat toc do cho 2 dong co
void set_speed(signed int16 left_speed,signed int16 right_speed); //Public function
//////////// Thiet dat toc do cho dong co ben trai
void set_left_speed(signed int16 left_speed); //Public function
//////////// Thiet dat toc do cho dong co ben phai
void set_right_speed(signed int16 right_speed); //Public function
- Lớp trung gian : Action
+) Định nghĩa tập action của một Robot NT .Do mỗi robot có cơ cấu cơ khí ,sơ đồ kết nối khác nhau ,cũng như đặc điểm robot nt mà ta hiện thực nên lớp này sẽ giúp trừu tượng tập action của robot .
+) Đây chính là tập phương thức của đối tượng Rbot NT.
- Lớp trung gian : Status
+) Có nhiều cách để bố trí sensor cũng như số lượng sensor sử dụng .Do đó nếu muốn chương trình quản lý bớt sự phụ thuộc này ,Robot NT sử dụng một Stack trạng thái để lưu trạng thái hiện thời của robot và một vài trạng thái trước đó .
+) Quá trình quản lý Stack này tuân theo một số quy luật nhất định .
- Chương trình xử lý chính :
+) Xử lý lần lượt từng mục tiêu trong goal[] của robot .
+) Mỗi mục tiêu xử lý được xử lý thông qua chuỗi action[] .
+) Khi gặp chướng ngại vật phải gọi lại phương thức tìm đường ,và robot sẽ có một đương khác .
+) Khi xử lý mục tiêu bị lỗi ,hàm tìm kiếm mục tiêu thay thế hợp lý sẽ được gọi ,robot sẽ thay đổi mục tiêu theo kết quả tìm được .
- Giải thuật tìm đường đi ngắn nhất :
+) Sử dụng giải thuật BrFS .
+) Sử dụng một list 128 bytes để lưu kết quả trung gian ,va 2 biến quản lý vị trí list .
Buoc 1 : Them diem bat dau
Buoc 2 : Xet cac diem trong list ,tim cac diem ke can no (di nhien van chua ton tai trong list )de them vao list .
Buoc 3 : Trong khi diem dang xet chua phai la dich thi tiep tuc buoc 2 .
buoc 4 : Giai thuat thoat o buoc 3 ,trong danh sach chac chan da co con duong di ,van de la lam sao lay duoc duong di ,vi co nhieu diem trung gian ko di den dich .Vay nen ta thuc hien loai bo cac diem nay :
+) Quet trong list bat dau tu dinh cua list (chinh la diem dich den)
+) Cac diem khong thoa tinh chat ke can nhau se bi danh dau ,bang cach gan ve 0xFF .
+) Cuoi cung chac chan ta duoc 1 duong di thoa man di duoc tu diem dau den diem dich .Va sau do ta chep lan luoc cac diem trung gian vao ket qua .
Vi du : Di tu (0,1) -> (2,2)
List : (0,1) count=1 lcount=0
While(lcount<count)
List : (0,1)|(0,2)(1,1)(0,0)(0,19) count=5 lcount=1
List : (0,1)(0,2)|(1,1)(0,0)(0,19)(0,3)(1,2) count=7 lcount=2
List : (0,1)(0,2)(1,1)|(0,0)(0,19)(0,3)(1,2)(2,1) count=8 lcount=3
List: (0,1)(0,2)(1,1)(0,0)|(0,19)(0,3)(1,2)(2,1) count=8 lcount=4
List: (0,1)(0,2)(1,1)(0,0)(0,19)|(0,3)(1,2)(2,1)(0,18)(19,1) count=10 lcount=5
List: (0,1)(0,2)(1,1)(0,0)(0,19)(0,3)|(1,2)(2,1)(0,18)(19,1)(1,3)(0,4) count=12 lcount=5
List: (0,1)(0,2)(1,1)(0,0)(0,19)(0,3)(1,2)|(2,1)(0,18)(19,1)(1,3)(0,4)[(2,2)] count=13 lcount=5
Da tim thay (2,2) trong list ,giai thuat ket thuc .Chuyen sang buoc loai bo cac diem du thua ko di toi dich .
List: (0,1)(0,2)(1,1)(0,0)(0,19)(0,3)(1,2)(2,1)(0,18)(19,1)(1,3)(0,4)[(2,2)]
List: (0,1)(0,2)(1,1)(0,0)(0,19)(0,3)(1,2)(2,1)(0,18)(19,1)(1,3)(X)[(2,2)]
List: (0,1)(0,2)(1,1)(0,0)(0,19)(0,3)(1,2)(2,1)(0,18)(19,1)(X)(X)[(2,2)]
List: (0,1)(0,2)(1,1)(0,0)(0,19)(0,3)(1,2)(2,1)(0,18)(X)(X)(X)[(2,2)]
List: (0,1)(0,2)(1,1)(0,0)(0,19)(0,3)(1,2)(2,1)(X)(X)(X)(X)[(2,2)]
List: (0,1)(0,2)(1,1)(0,0)(0,19)(0,3)(1,2)(2,1)(X)(X)(X)(X)[(2,2)]
List: (0,1)(0,2)(1,1)(0,0)(0,19)(0,3)(X)(2,1)(X)(X)(X)(X)[(2,2)]
List: (0,1)(0,2)(1,1)(0,0)(0,19)(X)(X)(2,1)(X)(X)(X)(X)[(2,2)]
List: (0,1)(0,2)(1,1)(0,0)(X)(X)(X)(2,1)(X)(X)(X)(X)[(2,2)]
List: (0,1)(0,2)(1,1)(X)(X)(X)(X)(2,1)(X)(X)(X)(X)[(2,2)]
List: (0,1)(X)(1,1)(X)(X)(X)(X)(2,1)(X)(X)(X)(X)[(2,2)]
Vay ket qua : (0,1) -> (1,1) -> (1,2) -> (2,2)
- Giải thuật tìm mục tiêu gần nhất :
Con giai thuat tim muc tieu gan nhat cung tuong tu nhu vay ,thay dieu kien thoat cua giai thuat la diem dang xet nam trong tap Lay wa hay Bo wa .Diem nao tim thay truoc chinh la diem can tim .
- Cập nhật tọa độ :
+) Sau khi Robot NT di chuyển thành công từ điểm này đến điểm kia thì mới cập nhật mới tọa độ .
+) Vì Robot NT có thể có nhiều cách để tiếp cận một mục tiêu nên sau khi thực hiện mục tiêu cần có cơ chế cập nhật lại tọa độ hợp lý ,nó phụ thuộc vào hường mà robot tiếp cận .
- Xử lý vị trí có va chạm :
+) Cập nhật điểm lỗi để giải thuật tìm đường tránh đi qua.
+) Có thể cho Robot quay và thay đổi hướng của robot .
+) Chạy lại giải thuật tìm đường khác .
- Xử lý mục tiêu gặp lỗi :
+)Cập nhật mục tiêu gặp lỗi .
+)Chạy lại giãi thuật tìm mục tiêu khác hợp lý để thay thế .
- Load thôg tin cấu hình từ EEPROM :
+) Nếu robot có sử dụng EEPROM thì khi khởi động ,các giá trị cầu hình của robot được load từ EEPROM.
- Lưu thông tin cấu hình vào EEPROM :
+) Với kích thước vùng nhớ EEPROM ,chúng ta sẽ phân chia các phân vùng để lưu các thông tin cấu hình .
+) Sử dụng một vài Bytes để đánh dấu giá trị trong EEPROM đã được cập nhật hay chưa ,nhằm tránh ghi nhiều lần và bị thay đổi khi reset VĐK .
+) Khi lần đầu tiên robot khởi động sau khi nạp chip VĐK ,các giá trị trong EEPROM được nạp giá trị mặc định một lần duy nhất .
- Giao tiếp PC :
+) Sử dụng COM hay USB .
+) Quy ước một số mã lệnh giao tiếp giữa PC và VĐK .