04

Robot học (Robotics) · Bước 4/8 · 6 phút

Lập trình robot: vòng lặp và máy trạng thái

Bạn tổ chức được code robot để nó phản ứng nhanh mà vẫn dễ đọc.

Vòng lặp điều khiển

Code robot là một vòng lặp: đọc cảm biến, quyết định, đặt lệnh cho động cơ, lặp lại. Một robot nhỏ có thể chạy vòng này 50 đến 100 lần mỗi giây. Vòng lặp càng nhanh và đều, robot càng mượt.

Tránh lệnh chờ chặn chương trình

delay() dừng mọi thứ. Trong lúc chờ, robot không thấy bức tường đang đến gần. Người mới học đâm vào bức tường này, theo đúng nghĩa đen, rất thường xuyên.

Thay vào đó, hãy xem đồng hồ. Trên Arduino, millis() cho biết board đã chạy bao lâu. Chỉ làm một việc khi đã đủ thời gian, và vòng lặp vẫn đọc cảm biến ở giữa các lần đó.

Máy trạng thái

Máy trạng thái (state machine) đặt tên cho các chế độ robot có thể ở, như SEARCHING, FOLLOWING_LINE, AVOIDING và STOPPED. Ở mỗi trạng thái, robot làm một việc đơn giản. Các quy tắc rõ ràng quyết định khi nào chuyển.

Cách này giúp code dễ đọc. Thay vì một mớ câu lệnh if rối rắm, bạn vẽ hành vi của robot thành các vòng tròn và mũi tên, rồi chuyển hình vẽ thành code.

Dùng AI để viết code

Chatbot viết code robot khá ổn, nhưng nó đoán số chân, thư viện và cách nối dây. Hãy thử trong trình mô phỏng trước. Đọc từng dòng. Một số chân sai trên phần cứng thật có thể lái động cơ đâm vào tường hoặc làm chập board.

Thử ngay

Thiết kế một máy trạng thái

  1. 1.Chọn một hành vi: robot chạy thẳng, lùi lại và rẽ khi có vật gần hơn 15 cm.
  2. 2.Liệt kê các trạng thái và các sự kiện làm robot chuyển giữa chúng.
  3. 3.Nhờ chatbot chuyển danh sách đó thành code Arduino dùng millis() và không dùng delay().
  4. 4.Chạy trong Wokwi, dùng LED thay cho động cơ.
Đây là các trạng thái và cách chuyển trạng thái của robot tôi: [dán vào]. Viết code Arduino dạng máy trạng thái dùng enum và câu lệnh switch. Dùng millis(), không dùng delay(). Giải thích từng lần chuyển trạng thái xảy ra thế nào.
Vì sao gọi delay(2000) trong vòng lặp chính của robot là rủi ro?

Tự kiểm tra

Vì sao gọi delay(2000) trong vòng lặp chính của robot là rủi ro?

Đọc thêm