Розуміння лінійного датчика
В останньому модулі ви використовували датчик відстані для вимірювання відстаней і змушували XRP рухатися вздовж стіни. XRP має ще один датчик, який дозволяє йому навігації: датчик слідування лінії.
Датчик слідування за лінією складається з двох датчиків «відбиття». Простіше кажучи, датчик відбиття світить світлом на землю і вимірює, скільки світла відбивається назад. Чим темніший об’єкт, тим менше світла він відбиває. Датчик використовує інфрачервоне світло, як і пульт дистанційного керування телевізором, тому світло не видиме для людського ока.
Цей датчик ідеально підходить для виявлення темних ліній на світлому тлі! Якщо датчик знаходиться над темною лінією, відбиватиметься менше світла, а якщо він не знаходиться над лінією, відбиватиметься більше світла. Ви можете використовувати цю інформацію у своєму коді, щоб робот міг вирішувати, що робити в таких ситуаціях.
XRP має два датчики відбиття: лівий і правий. Якщо ви подивитеся на нижню частину XRP на платі датчика, ви побачите два датчики. S1 — це лівий датчик, а S2 — правий. Пізніше в цьому модулі ви дізнаєтеся, як використовувати обидва датчики для дуже плавного слідування лініям. У цьому уроці ми будемо використовувати тільки правий датчик.
Два датчики відбиття на XRP.
XRPLib надає функції для зчитування значень датчиків відбиття:
from XRPLib.defaults import *
# Reads the left sensor and stores the value in the variable "left"
left = reflectance.get_left()
# Reads the right sensor and stores the value in the variable "right"
right = reflectance.get_right()
Перш ніж робити що-небудь з новим датчиком, потрібно добре розуміти значення, які він буде видавати в різних умовах. Для датчика відбиття було б добре знати, що він показує, коли знаходиться повністю поза лінією (бачить білу поверхню), повністю на лінії (бачить чорну поверхню) і деякі «проміжні» значення, коли датчик знаходиться наполовину на лінії і наполовину поза лінією.
Порада
Пам’ятайте, що для цього завдання ви повинні використовувати тільки правий лінійний датчик. Переконайтеся, що ви центруєте правильну частину плати датчика над лінією під час вимірювань.
Спробуйте
Напишіть код для зчитування значення правого датчика відбиття і використовуйте веб-сервер для реєстрації та графічного відображення значень у нескінченному циклі. Переміщайте XRP по білій поверхні з лінією і записуйте значення, які датчик зчитує в різних умовах, зазначених вище.
Що ви помітили в виміряних значеннях? У документації до модуля «reflectance» в XRPLib зазначено, що функції «get_left()» та «get_right()» повертають число від 0 до 1. Чи досягали ваші значення точно 0 або точно 1? Чи можете ви сказати, який діапазон чисел відповідає баченню білого кольору, а який — баченню чорного?
Приклад графіку даних датчика відбиття.
Вище наведено приклад графіка деяких даних з датчика відбиття. Приблизно в точці 50 одиниць на осі X датчик відбиття був переміщений над лінією (ці дані були записані, коли робот рухався по лінії), а приблизно в точці 60 одиниць датчик відбиття був переміщений назад з лінії. Чи схожий ваш графік на наведений вище?
Примітка
Ваш графік не буде виглядати точно так само, як наш. Немає двох однакових датчиків відбиття, тому важливо, щоб ви проводили власні вимірювання за допомогою власного робота.
Добре експериментувати з датчиком відбиття, щоб побачити, як він працює, але ви взяли ці дані не просто так. Датчик слідування лінії повідомляє число, але насправді ми хочемо, щоб він повідомляв, бачить він лінію чи ні. Для цього вам потрібно вибрати «порогове» значення, при якому, якщо датчик повідомляє значення, яке перевищує поріг, ми можемо з упевненістю припустити, що датчик бачить лінію, а якщо датчик повідомляє значення нижче порогу, ми можемо припустити, що він не бачить лінію.
Спробуйте
Подивіться на графік і виберіть порогове значення, яке вам здається доцільним. Число, яке знаходиться приблизно посередині між мінімальним і максимальним значенням, яке ви виміряли, є хорошим початковим пунктом.
Напишіть функцію під назвою is_over_line(), яка зчитує значення
правого датчика відбиття і повертає True, якщо датчик бачить лінію
(значення вище порогу), або False, якщо не бачить. Не видаляйте цю
функцію, коли закінчите, тому що ви будете використовувати її в решті модуля!
Використовуйте веб-сервер, щоб записати результат виклику вашої функції в нескінченному циклі. Переміщайте робота по поверхні з лініями, щоб переконатися, що він завжди повертає правильне значення на основі того, що бачить датчик. Якщо ви отримуєте неправильні значення, відрегулюйте порогове значення.