trhai_co
16-04-2013, 09:45 AM
Kỹ thuật dò dường cho ROBOCON
Đối với cuộc thi robocon, dò đường là yếu tố quan trọng nhất, vì vậy mình giới thiệu đến các bạn các kỹ thuật dò đường đã được mình áp dụng trong các cuộc thi, mình chỉ giới thiệu về mặt khái niệm, tùy mỗi người sẽ thực hiện như thế nào hoặc các bạn sẽ không làm theo vì nó dở quá . Nhưng dù sao đi nữa, nó cũng có thể giúp ích cho nhiều người khác.
http://hlab.com.vn/images/stories/articles/robot%20do%20duong.jpg Giới thiệu Các kỹ thuật đơn giản có thể giúp bạn thực hiện đơn giản, tuy nhiên không ổn định, và không có khả năng chống nhiễu và dao động lớn khi di chuyển. Các kỹ thuật tốt hơn có thể tăng tốc độ dò đường lên rất cao, và sử dụng quán tính như một cách chống nhiễu hiệu quả. Tuy nhiên kỹ thuật tốt nhất cho phép bạn hoạt động đúng, ổn định ngay cả khi các cảm biến là không tin cậy hoặc có trục trặc xảy ra với các cảm biến. Mình sẽ lần lượt giới thiệu và phân tích các kỹ thuật từ cơ bản đến phức tạp.
http://hlab.com.vn/images/stories/articles/line-follow-main-300x241.png Hình : Robot di chuyển theo vạch Nhận biết vạch Để dò đường, dĩ nhiên chúng ta phải làm sao nhận biết được đâu là đường (vạch trắng), sau đó mới điều khiển bánh xe di chuyển sao cho robot không "lạc đường".
http://hlab.com.vn/images/stories/articles/san%20thi%20dau.jpg
Hình : Sân thi đấu điển hình
http://hlab.com.vn/images/stories/articles/nhan%20biet%20vach.jpg
Hình : Nhận diện vạch trắng dùng hồng ngoại
http://hlab.com.vn/images/stories/articles/cam%20bien.jpg
Hình : Cảm biến nhận diện vạch trắng
Nguyên tắc nhận diện vạch trắng thì chắc mọi người hầu hết đã biết, đó là sử dụng ánh sáng và đo lượng ánh sáng phản xạ để biết được vạch trắng hay sàn thi đấu, lý thuyết là vật có màu sáng thì phản xạ ánh sáng nhiều hơn vật sẫm màu, vì các vật sẫm màu hấp thu ánh sáng mạnh. Mình không bàn nhiều về việc nhận biết vạch trắng, Ở đây mình chỉ tập trung vào giải thuật dò đường mà thôi.
Thuật toán cơ bản Nguyên tắc điều khiển đơn giản nhất là robot lệch về phía bên nào thì ta sẽ điều khiển cho robot "bẻ lái" về hướng ngược lại. đây gọi là điều khiển ON-OFF. Cách điều khiển này tuy đơn giản nhưng robot sẽ chạy lắc lư như đang say rượu vậy. Như vậy ta sẽ cần một cách điều khiển tốt hơn,cải tiến của cách trên, đó là ta cần phải xem xét thêm là robot đang lệch nhiều hay ít để ta sẽ "bẻ lái" nhiều hay ít. Đây gọi là phương pháp điều khiển tỷ lệ. Ví dụ ta có 6 cảm biến trên robot :3 trái (A1 A2 A3),3 phải (A4 A5 A6). Ta sẽ có các độ lệch tương ứng là +2 ; +1 ; 0 ; 0 ; -1 ; -2 tương ứng với A1 A2 A3 A4 A5 A6. Vậy nếu cảm biến A2 có tín hiệu ta sẽ có độ lệch là +1, A6 tích cực ta sẽ có độ lệch là -2. Như vậy giá trị điều khiển động cơ sẽ tỷ lệ theo độ lệch này :
ví dụ như PWM =PWM0 +/- K*độ lệch (K là hệ số tỷ lệ PWM là giá trị điều xung cho động cơ, PWM0 là tốc độ trung bình) . PWM bánh trái sẽ là cộng, PWM của bánh phải sẽ là trừ. Dĩ nhiên đó là lý thuyết, trong thực tế ỡ việt nam. Động cơ thì mua đồ cũ, cơ khí thì có độ rơ ... hai động cơ thì không đều nhau, do đó thực tế các bạn chúng ta không dùng công thức trên để tính ra PWM của hai bánh xe, mà thường "mò" thông số cho các tốc độ khác nhau xem ứng với độ lệch K thì PWM của hai bánh sẽ là bao nhiêu. Tuy nhiên, giá trị tìm được sẽ xấp xỉ công thức trên.
Vậy cách thực hiện là như thế nào? Đầu tiên tìm PWM0 của từng bánh bằng cách thử cho PWM hai bánh sao cho robot chạy thẳng là được. Ví dụ như tìm được PWM0 bánh trái là 100, bánh phải là 120 (giả sử ta đang muốn robot dò đường với vận tốc ~ 100/255 vận tốc cực đại của động cơ). Sau đó ta sẽ cho :
Ứng với k=0, PWM bánh trái sẽ là 100, PWM bánh phải sẽ là 120
Ứng với k=+1, PWM của bánh trái sẽ là 100+20, bánh phải sẽ giữ nguyên 120.
Ứng với k=-1 thi bánh trái giữ nguyên, bánh phải là 120+20
Tương tự ta tính cho k=+2,-2.
Sau đó ta thử xem robot dò đường có tốt không, nếu robot dò đường bị dao động lớn,nghĩa là ta cần giảm bớt các giá trị cộng vào hoặc trừ đi. Nếu robot dò đường không bám sát vạch tốt mà hay bị lạng ra ngoài, nghĩa là giá trị cộng vào hoặc trừ đi quá nhỏ, không đủ để đưa robot vào quỹ đạo đường đi. Tất cả các giá trị này phải mỏ bằng tay, và tùy theo động cơ, kết cấu, trọng lượng robot...
Các phương pháp cải thiện Để cải tiến kỹ thuật này, ta cần tăng thêm số bước lượng tử, nghĩa là ta mới phân biệt được 5 độ lệch +2 , +1 , 0 , -1 , -2 . Như vậy khi robot bị lệch từ -1 tới -2 ta mới phát hiện được . Dĩ nhiên, nếu tăng số lượng cảm biến hoặc giảm khoảng cách giữa các cảm biến ta có thể giải quyết được điều này, nhưng để ý là với 6 cảm biến ta có thể phân biệt được tới 13 mức độ lệch bằng cách bố trí khoảng cách 2 cảm biến nhỏ hơn khoảng cách vạch trắng như sau.
http://hlab.com.vn/images/stories/articles/bo%20tri%20cam%20bien3.jpg Hình : Các trường hợp có thể có với 6 cảm biến
Chú ý là khi vạch trắng nằm ngoài vị trí các cảm biến thì ta sẽ không có thông tin để điều khiển, Nhưng một thủ thuật nhỏ là sử dụng biến nhớ trái/phải sẽ cho phép chúng ta xử lý robot vào lại đúng vào tầm của cảm biến mà không làm robot lạc đường.
Phương pháp điều khiển trên tuy đơn giản nhưng vô cùng hiệu quả trong các cuộc thi Robocon, bởi vì các bạn đa số sử dụng động cơ hộp số, robot bốn bánh truyền động hai bánh sau. Hệ robot như vậy có quán tính lớn và tính ì cao, do đó phương pháp điều khiển tỷ lệ cho đáp ứng tương đối tốt.
Một phương pháp khác để cải tiến tốc độ đã được nhiều đội sử dụng đó là lợi dụng quán tính lớn để tăng giá trị trung tâm PWM0 lên rất cao khi robot đang ở trạng thái tối ưu (độ lệch bằng 0). Khi nhận thấy robot bị lệch khỏi vị trí trung tâm thì lại sử dụng PWM0 thấp để tính toán trong công thức ở trên nhằm giúp cho robot ổn định . Sử dụng cách này các bạn sẽ thấy robot chạy rất nhanh, nhưng không đều lúc rất nhanh, lúc lại chậm , tính ổn định phụ thuộc nhiều vào động cơ và kết cấu cơ khí của robot.
Phương pháp điều khiển này cũng có những cải tiến nhỏ khác nhằm tăng cường độ ổn định, giảm sai xót do cảm biến mà mình không đề cập ở đây, nhưng nhìn chung phương pháp này đơn giản, ổn định và tin cậy, do đó được rất nhiều đội sử dụng.
Điều khiển tối ưu Kỹ thuật cao hơn sử dụng khâu vi phân trong quá trình tính toán, giúp tăng sự ổn định, đáp ứng tốt. Kỹ thuật này đặc biệt hiệu quả khi kết cấu robot được thay đổi tương ứng gia tăng sự linh hoạt đó là sử dụng kết cấu 3 bánh, trọng lượng nhẹ, giảm ma sát, sử dụng động cơ moment lớn và ổn định. Với kết cấu này,phương pháp điều khiển tỷ lệ là chưa đủ, và sẽ làm cho robot di chuyển theo hình sin, và không bám vạch tốt (mặc dù robot không bị lạc đường). Phương pháp này ít dùng (Mình hay sử dụng loại này). Mình chỉ giới thiệu cho các bạn về mặt nguyên tắc,đó là ta sẽ thêm thông tin về hướng và gia tốc độ lệch của robot.
Ví dụ vị trí độ lệch hiện tại là +1, nhưng nếu trước đó độ lệch là 0 thì robot đang hướng ra xa vạch, ngược lại nếu trước đó là +2, robot đang hướng vào vạch. Dĩ nhiên với hai trường hợp này, ta cần hai giá trị PWM cho hai bánh khác nhau nếu muốn tối ưu. Trong khi nếu sử dụng kỹ thuật ở trên, cả hai trường hợp đều điều khiển giống nha vì ta có độ lệch đều bằng 1.
Còn về gia tốc lệch, ví dụ nếu trước đó độ lệch là 0 thì vi phân là |0-(+1)|=1, nếu độ lệch trước đó là -2 thì vi phân là |-2-(+1)|=3, vậy cùng độ lệch hiện tại là +1, nhưng trường hợp vi phân là 3 phải điều khiển khác trường hợp vi phân là 1, do đó quá trình tính vi phân sẽ bù vào những thiếu sót so quá trình tính tỷ lệ, giúp cho robot di chuyển smooth hơn và ổn định hơn, dĩ nhiên độ phức tạp cũng tăng lên.
Ở đây, mình không đề cập đến lập trình, vì mỗi người sử dụng VĐK khác nhau, mỗi người sử dụng ngôn ngữ lập trình khác nhau, cái mình muốn là chia sẻ kiến thức giúp mọi người có thể dựa vào đó để tự phát triển riêng cho mình, chúc các bạn thành công !
Đối với cuộc thi robocon, dò đường là yếu tố quan trọng nhất, vì vậy mình giới thiệu đến các bạn các kỹ thuật dò đường đã được mình áp dụng trong các cuộc thi, mình chỉ giới thiệu về mặt khái niệm, tùy mỗi người sẽ thực hiện như thế nào hoặc các bạn sẽ không làm theo vì nó dở quá . Nhưng dù sao đi nữa, nó cũng có thể giúp ích cho nhiều người khác.
http://hlab.com.vn/images/stories/articles/robot%20do%20duong.jpg Giới thiệu Các kỹ thuật đơn giản có thể giúp bạn thực hiện đơn giản, tuy nhiên không ổn định, và không có khả năng chống nhiễu và dao động lớn khi di chuyển. Các kỹ thuật tốt hơn có thể tăng tốc độ dò đường lên rất cao, và sử dụng quán tính như một cách chống nhiễu hiệu quả. Tuy nhiên kỹ thuật tốt nhất cho phép bạn hoạt động đúng, ổn định ngay cả khi các cảm biến là không tin cậy hoặc có trục trặc xảy ra với các cảm biến. Mình sẽ lần lượt giới thiệu và phân tích các kỹ thuật từ cơ bản đến phức tạp.
http://hlab.com.vn/images/stories/articles/line-follow-main-300x241.png Hình : Robot di chuyển theo vạch Nhận biết vạch Để dò đường, dĩ nhiên chúng ta phải làm sao nhận biết được đâu là đường (vạch trắng), sau đó mới điều khiển bánh xe di chuyển sao cho robot không "lạc đường".
http://hlab.com.vn/images/stories/articles/san%20thi%20dau.jpg
Hình : Sân thi đấu điển hình
http://hlab.com.vn/images/stories/articles/nhan%20biet%20vach.jpg
Hình : Nhận diện vạch trắng dùng hồng ngoại
http://hlab.com.vn/images/stories/articles/cam%20bien.jpg
Hình : Cảm biến nhận diện vạch trắng
Nguyên tắc nhận diện vạch trắng thì chắc mọi người hầu hết đã biết, đó là sử dụng ánh sáng và đo lượng ánh sáng phản xạ để biết được vạch trắng hay sàn thi đấu, lý thuyết là vật có màu sáng thì phản xạ ánh sáng nhiều hơn vật sẫm màu, vì các vật sẫm màu hấp thu ánh sáng mạnh. Mình không bàn nhiều về việc nhận biết vạch trắng, Ở đây mình chỉ tập trung vào giải thuật dò đường mà thôi.
Thuật toán cơ bản Nguyên tắc điều khiển đơn giản nhất là robot lệch về phía bên nào thì ta sẽ điều khiển cho robot "bẻ lái" về hướng ngược lại. đây gọi là điều khiển ON-OFF. Cách điều khiển này tuy đơn giản nhưng robot sẽ chạy lắc lư như đang say rượu vậy. Như vậy ta sẽ cần một cách điều khiển tốt hơn,cải tiến của cách trên, đó là ta cần phải xem xét thêm là robot đang lệch nhiều hay ít để ta sẽ "bẻ lái" nhiều hay ít. Đây gọi là phương pháp điều khiển tỷ lệ. Ví dụ ta có 6 cảm biến trên robot :3 trái (A1 A2 A3),3 phải (A4 A5 A6). Ta sẽ có các độ lệch tương ứng là +2 ; +1 ; 0 ; 0 ; -1 ; -2 tương ứng với A1 A2 A3 A4 A5 A6. Vậy nếu cảm biến A2 có tín hiệu ta sẽ có độ lệch là +1, A6 tích cực ta sẽ có độ lệch là -2. Như vậy giá trị điều khiển động cơ sẽ tỷ lệ theo độ lệch này :
ví dụ như PWM =PWM0 +/- K*độ lệch (K là hệ số tỷ lệ PWM là giá trị điều xung cho động cơ, PWM0 là tốc độ trung bình) . PWM bánh trái sẽ là cộng, PWM của bánh phải sẽ là trừ. Dĩ nhiên đó là lý thuyết, trong thực tế ỡ việt nam. Động cơ thì mua đồ cũ, cơ khí thì có độ rơ ... hai động cơ thì không đều nhau, do đó thực tế các bạn chúng ta không dùng công thức trên để tính ra PWM của hai bánh xe, mà thường "mò" thông số cho các tốc độ khác nhau xem ứng với độ lệch K thì PWM của hai bánh sẽ là bao nhiêu. Tuy nhiên, giá trị tìm được sẽ xấp xỉ công thức trên.
Vậy cách thực hiện là như thế nào? Đầu tiên tìm PWM0 của từng bánh bằng cách thử cho PWM hai bánh sao cho robot chạy thẳng là được. Ví dụ như tìm được PWM0 bánh trái là 100, bánh phải là 120 (giả sử ta đang muốn robot dò đường với vận tốc ~ 100/255 vận tốc cực đại của động cơ). Sau đó ta sẽ cho :
Ứng với k=0, PWM bánh trái sẽ là 100, PWM bánh phải sẽ là 120
Ứng với k=+1, PWM của bánh trái sẽ là 100+20, bánh phải sẽ giữ nguyên 120.
Ứng với k=-1 thi bánh trái giữ nguyên, bánh phải là 120+20
Tương tự ta tính cho k=+2,-2.
Sau đó ta thử xem robot dò đường có tốt không, nếu robot dò đường bị dao động lớn,nghĩa là ta cần giảm bớt các giá trị cộng vào hoặc trừ đi. Nếu robot dò đường không bám sát vạch tốt mà hay bị lạng ra ngoài, nghĩa là giá trị cộng vào hoặc trừ đi quá nhỏ, không đủ để đưa robot vào quỹ đạo đường đi. Tất cả các giá trị này phải mỏ bằng tay, và tùy theo động cơ, kết cấu, trọng lượng robot...
Các phương pháp cải thiện Để cải tiến kỹ thuật này, ta cần tăng thêm số bước lượng tử, nghĩa là ta mới phân biệt được 5 độ lệch +2 , +1 , 0 , -1 , -2 . Như vậy khi robot bị lệch từ -1 tới -2 ta mới phát hiện được . Dĩ nhiên, nếu tăng số lượng cảm biến hoặc giảm khoảng cách giữa các cảm biến ta có thể giải quyết được điều này, nhưng để ý là với 6 cảm biến ta có thể phân biệt được tới 13 mức độ lệch bằng cách bố trí khoảng cách 2 cảm biến nhỏ hơn khoảng cách vạch trắng như sau.
http://hlab.com.vn/images/stories/articles/bo%20tri%20cam%20bien3.jpg Hình : Các trường hợp có thể có với 6 cảm biến
Chú ý là khi vạch trắng nằm ngoài vị trí các cảm biến thì ta sẽ không có thông tin để điều khiển, Nhưng một thủ thuật nhỏ là sử dụng biến nhớ trái/phải sẽ cho phép chúng ta xử lý robot vào lại đúng vào tầm của cảm biến mà không làm robot lạc đường.
Phương pháp điều khiển trên tuy đơn giản nhưng vô cùng hiệu quả trong các cuộc thi Robocon, bởi vì các bạn đa số sử dụng động cơ hộp số, robot bốn bánh truyền động hai bánh sau. Hệ robot như vậy có quán tính lớn và tính ì cao, do đó phương pháp điều khiển tỷ lệ cho đáp ứng tương đối tốt.
Một phương pháp khác để cải tiến tốc độ đã được nhiều đội sử dụng đó là lợi dụng quán tính lớn để tăng giá trị trung tâm PWM0 lên rất cao khi robot đang ở trạng thái tối ưu (độ lệch bằng 0). Khi nhận thấy robot bị lệch khỏi vị trí trung tâm thì lại sử dụng PWM0 thấp để tính toán trong công thức ở trên nhằm giúp cho robot ổn định . Sử dụng cách này các bạn sẽ thấy robot chạy rất nhanh, nhưng không đều lúc rất nhanh, lúc lại chậm , tính ổn định phụ thuộc nhiều vào động cơ và kết cấu cơ khí của robot.
Phương pháp điều khiển này cũng có những cải tiến nhỏ khác nhằm tăng cường độ ổn định, giảm sai xót do cảm biến mà mình không đề cập ở đây, nhưng nhìn chung phương pháp này đơn giản, ổn định và tin cậy, do đó được rất nhiều đội sử dụng.
Điều khiển tối ưu Kỹ thuật cao hơn sử dụng khâu vi phân trong quá trình tính toán, giúp tăng sự ổn định, đáp ứng tốt. Kỹ thuật này đặc biệt hiệu quả khi kết cấu robot được thay đổi tương ứng gia tăng sự linh hoạt đó là sử dụng kết cấu 3 bánh, trọng lượng nhẹ, giảm ma sát, sử dụng động cơ moment lớn và ổn định. Với kết cấu này,phương pháp điều khiển tỷ lệ là chưa đủ, và sẽ làm cho robot di chuyển theo hình sin, và không bám vạch tốt (mặc dù robot không bị lạc đường). Phương pháp này ít dùng (Mình hay sử dụng loại này). Mình chỉ giới thiệu cho các bạn về mặt nguyên tắc,đó là ta sẽ thêm thông tin về hướng và gia tốc độ lệch của robot.
Ví dụ vị trí độ lệch hiện tại là +1, nhưng nếu trước đó độ lệch là 0 thì robot đang hướng ra xa vạch, ngược lại nếu trước đó là +2, robot đang hướng vào vạch. Dĩ nhiên với hai trường hợp này, ta cần hai giá trị PWM cho hai bánh khác nhau nếu muốn tối ưu. Trong khi nếu sử dụng kỹ thuật ở trên, cả hai trường hợp đều điều khiển giống nha vì ta có độ lệch đều bằng 1.
Còn về gia tốc lệch, ví dụ nếu trước đó độ lệch là 0 thì vi phân là |0-(+1)|=1, nếu độ lệch trước đó là -2 thì vi phân là |-2-(+1)|=3, vậy cùng độ lệch hiện tại là +1, nhưng trường hợp vi phân là 3 phải điều khiển khác trường hợp vi phân là 1, do đó quá trình tính vi phân sẽ bù vào những thiếu sót so quá trình tính tỷ lệ, giúp cho robot di chuyển smooth hơn và ổn định hơn, dĩ nhiên độ phức tạp cũng tăng lên.
Ở đây, mình không đề cập đến lập trình, vì mỗi người sử dụng VĐK khác nhau, mỗi người sử dụng ngôn ngữ lập trình khác nhau, cái mình muốn là chia sẻ kiến thức giúp mọi người có thể dựa vào đó để tự phát triển riêng cho mình, chúc các bạn thành công !