Nội Dung Chính
Trang 44
Học xong bài này em sẽ:
- Biết được các lệnh điều khiển cảm biến siêu âm của robot.
- Biết lập trình điều khiển được robot nhận biết vật cản trên sa bàn.
Khởi động
Nếu trên đường đi robot gặp vật cản thì sẽ như thể nào? Làm thế nào để robot nhận ra được vật cản và làm gì để tránh vật cản đó?
1. Cảm biến siêu âm
Hoạt động 1: Tìm hiểu cách điều khiển cảm biến siêu âm Đọc, thảo luận về nguyên tắc hoạt động và lệnh lập trình cảm biến siêu âm. |
a) Lệnh lập trình của cảm biến siêu âm
Câu lệnh lập trình cảm biến siêu âm luôn trả về giá trị là khoảng cách từ cảm biến siêu âm đến vật cản phía trước theo đơn vị centimét.
Bảng 10.1. Lệnh lập trình cảm biền siêu âm
Lệnh | Tham số | Mô tả ý nghĩa |
Tín hiệu siêu âm (cổng) | cổng = vị trí cổng I/O có kết nối với cảm biến siêu âm. | Lệnh trả lại giá trị là khoảng cách từ vị trí cảm biến đến vật cản. |
Tham số cổng là cổng kết nối cảm biến siêu âm với bảng mạch điều khiển. Đối với mỗi loại robot thì các công được quy định và đặt tên khác nhau.
Chú ý: Mỗi cảm biến siêu âm chỉ có tác dụng trong một khoảng cách nhất định. Gọi khoảng cách này là Max. Khi vật cản ở xa, vượt qua giới hạn Max, có thể coi hàm nhận tín hiệu cảm biến sẽ trả về giá trị Max.
b) Lập trình với cảm biến siêu âm
Trong Bài 6 chúng ta đã biết cấu trúc chung của một chương trình điều khiển robot bao gồm hai phần: Phần các lệnh được chạy một lần được đặt sau lệnh Khởi động chương trình và phần gồm các lệnh sẽ được lặp vô tận nằm trong vòng lặp forever.
Trang 45
Để robot nhận được tín hiệu cảm biến siêu âm liên tục với thời gian thực chúng ta cần đưa lệnh điều khiển cảm biến siêu âm vào trong nhóm lệnh thứ hai, tức là nhóm lệnh lặp vô hạn trong chương trình.
Sơ đồ chung của việc xử lí thông tin cảm biến siêu âm của robot:
forever
if <nhận tín hiệu cảm biến siêu âm>
Xử lí tín hiệu cảm biến siêu âm
Giả sử cảm biến siêu âm kết nói với bảng mạch điều khiển ở cổng 3. Chương trình điều khiển robot dừng lại khi phía trước có vật cản ở khoảng cách nhỏ hơn 10 cm có dạng sau:
Khởi động chương trình
forever
if tín hiệu siêu âm (3) ‹ 10
Dừng lại
else
Đi thẳng (150)
Câu hỏi
1. Nếu câu lệnh xử lí tín hiệu cảm biến siêu âm đặt trong vòng lặp không vô hạnthì sẽ như thế nào?
2. Vì sao không thể đặt lệnh kiểm tra nhận biết vật cản của cảm biến siêu âm ở khoảng cách quá ngắn, ví dụ dưới 1 cm?
2. Robot nhận biết và tránh vật cản
Hoạt động 2: Robot tránh vật cản như thế nào? Đọc, thảo luận về nguyên tắc chung và cách lập trình điều khiển robot tránh vật cản. |
a) Cách điều khiển chung để robot xử lí khi gặp vật cản
Chúng ta đã biết các lệnh sử dụng cảm biến siêu âm để nhận biết và tránh vật cản của robot đều phải được đặt trong nhóm lệnh lặp vô tận forever. Chúng ta sẽ xét các trường hợp cụ thể hơn của công việc điều khiển này.
(1) Điều khiển robot gặp vật cản thì dừng lại. có thể cho robot tiền đến sát vật cản mới dừng lại. Chương trình có thể như sau:
Khởi động chương trình
forever
Đi thẳng (50)
if Tín hiệu siêu âm (cổng) < 10
Dừng lại
Trang 46
(2) Điều khiển robot gặp vật cản thì rẽ trái để tránh vật cản. Có hai cách để thực hiện:
Cách 1. Vì yêu cầu robot rẽ trái cần một lệnh điều khiển bổ sung nên chúng ta cho robot cảm nhận vật cản ở khoảng cách xa hơn, thực hiện lệnh xoay trái và đi tiếp.
Chương trình có thể như sau:
Khởi động chương trình
forever
Đi thẳng(0).
if Tín hiệu siêu âm (cổng) < 10
Xoay trái (50)
Đợi 1 giây
Cách 2. Trong một số trường hợp để điều khiển robot tránh vật cản có thể cho robot đi lùi lại 0,5 giây để đảm bảo khoảng cách an toàn với vật cản, sau đó mới cho robot rẽ trái và đi tiếp:
Khởi động chương trình
forever
Đi thẳng (50)
if Tín hiệu siêu âm (cổng) < 10
Đi lùi (50)
Đợi 0.5 giây
Xoay trái (50)
Đợi 0.5 giây
Chú ý:
- Xử lí tương tự cho robot rẽ phải để tránh vật cản
- Trên thực tế em cần điều chỉnh chi tiết các tham số về tốc độ, khoảng cách và thời gian để chương trình đạt được hiệu quả như ý muốn.
b) Cách điều khiển robot tránh nhiễu vật cản trên đường đi
Trong phần này chúng ta xét một ví dụ với yêu cầu phức tạp hơn của robot khi gặp và tránh vật cản. Giả sử trên đường đi đã lập trình sẵn của robot có rất nhiều vật cản. Yêu cầu như sau:
- Nếu gặp vật cản thứ nhất thì rẽ trái.
- Nếu gặp vật cản thứ hai thì rẽ phải.
- Nếu gặp các vật cản tiếp theo thì lặp lại yêu cầu như trên: robot sẽ rẽ trái và sau đó rẽ phải nếu gặp vật cản tiếp theo.
Để thực hiện yêu cầu trên, chúng ta sẽ thiết lập một biến nhớ có tên dem_vat_can để đếm số vật cản và tính toán để thực hiện đúng theo yêu cầu của chương trình.
Trang 47
Rẽ trái
Rẽ phải
Hình 10.1. Hướng di chuyển của robot
Ban đầu thiết lập dem_ vat_can = 0, sau đó mỗi lần gặp vật cản thì tăng biến nhớ lên 1 đơn vị. Nếu dem_vat_ can = 2 thì đặt lại giá trị 0 để lặp lại quá trình tránh vật cản từ đầu.
Sau đây là một phương án thực hiện:
Khởi động chương trình
dem_vat_can = 0
forever
Đi thẳng (50)
if Tín hiệu siêu âm (cổng) < 10
if dem_vat_can = 0
Xoay trái (50)
if dem_vat_can = 1
Xoay phải (50)
dem_vat_can = dem_vat_can + 1
if dem_vat_can = 2
dem_vat_can = 0
Đợi 0.5 giây
Giải thích chương trình.
Ban đầu robot sẽ đi thẳng với tốc độ 50 cho đến khi gặp các vật cản robot sẽ xoay trái hoặc xoay phải tương ứng thứ tự vật cản. Lệnh đợi 0.5 giây ở cuối chương trình giúp tạo thời gian để robot thực hiện các lệnh xoay ở phía trên
Trang 48
c) Ví dụ minh họa cho chương trình trên G-Robot
Trên robot G-Robot, cổng mặc định của cảm biến siêu âm là port 3. Chương trình lập trình trên phần mềm GaraBlock sẽ như Hình 10.2.
Hình 10.2. Chương trình minh hoạ
Câu hỏi
Em hãy viết đoạn chương trình điều khiển robot chuyển động thẳng, nếu gặp vật cản thì quay lại đi theo chiều ngược lại.
LUYỆN TẬP
1. Vì sao luôn phải đặt lệnh nhận tín hiệu cảm biến siêu âm trong một vòng lặp vô hạn?
2. Nếu có 2 cảm biến siêu âm kết nối với robot thì làm thế nào để phân biệt được tín hiệu của 2 cảm biến khi lập trình?
VẬN DỤNG
1. Em hãy tìm hiểu xem các robot hút bụi sử dụng cảm biến siêu âm để cảm nhận vật cản như thế nào.
2. Em hãy viết chương trình mở rộng yêu cầu của chương trình minh hoạ trong Mục 2, yêu cầu robot xử lí vật cản như sau:
- Nếu gặp vật cản thứ nhất thì rẽ trái
- Nếu gặp vật cản thứ hai thì rẽ phải.
- Nếu gặp vật cản thứ ba thì xoay 180 độ đi theo chiều ngược lại.
- Nếu gặp các vật cản tiếp theo thi lặp lại yêu cầu như trên: robot sẽ rẽ trái, sau đó rẽ phải, sau đó xoay để đi ngược lại nếu gặp các vật cản tiếp theo.
Bình Luận
Để Lại Bình Luận Của Bạn