Робототехніка з пелюшок
Матеріал з Edumandriva
Зміст
Рух робота
Коли ви говорите комусь, куди йому рухатися, ви віддаєте команду. Ця команда може прив'язана до якогось орієнтира, щоб Виконавець команди міг зрозуміти, що від нього хочуть. Наприклад орієнтиром (або його ще називають маяком) можете бути ви - наприклад, ви даєте команду вашому приятелю "йди до мене". Також маяком може бути якийсь предмет: "Йди до того столу". Або команда може бути прив'язана до будь-якої системи координат.
Вставши обличчям до Виконавця, ви самі будете для нього маяком і він зможе виконувати команди щодо вас – вперед (від вас), назад (до вас), вліво та вправо. Або якщо це екран, Виконавець зможе рухатися вгору, вниз, вліво або вправо, вважаючи маяками сторони екрана. Що ж вибрати? Так як ми маємо справу з роботом, то на місцевості ми маємо справу з прив'язкою до поверхні та сторін світла, тому вважаємо що на екрані перед нами вид на Робота зверху і він має пересуватися щодо вас. Ви знаходитесь за межами екрана внизу. Тобто віддавши команду "вперед" (від вас), робот на екрані рухатиметься нагору, "вниз" - до вас.

Рух в абсолютних координатах
Відкрийте Scratch, видаліть поточний персонаж (правою кнопкою миші на ньому - видалити) і виберіть Малювати новий об'єкт. Наш робот буде круглий, тож намалюйте щось схоже на зафарбоване коло.
Тепер потрібно скласти програму, яка керує роботом. Якщо ви подивіться розділ Рух , то не виявите параметрів "вперед, назад, ліворуч, праворуч", оскільки керування програмним роботом (як ви вже напевно знаєте) йде системою координат. У нашому випадку рух вперед означатиме збільшення координати Y, назад - їїзменшення. Вправо збільшує координату X, а вліво – зменшує її. Центр екрану матиме координати X=0, Y=0.

Введіть наступний код:

При старті програми робот встановлюється вихідну точку (координату 0,0).
При натисканні вгору робот переміститься вперед (тобто збільшить координату Y).
Орієнтація (Відносні координати)
Попросіть друга побути Роботом. Нехай він стане спиною до вас, а потім випонить ваші команди "вперед, назад, вліво, вправо". Ви зауважили, що його орієнтація щодо вас не змінилася?
Тепер скомандуйте другу "повернися праворуч". Ви бачите, що він став до вас боком. Тепер дайте команду "вперед". Ваш друг, зображуючи робота, щойно перемістився туди, куди раніше ви могли перемістити Роботу командою "ліворуч". Тобто робот змінив своє розташування у просторі (орієнтацію), і тепер старі команди викликають переміщення в іншому напрямку.
У реальному житті роботи також зазвичай орієнтовані - вони не можуть просто переміститися вліво або вправо, не змінивши свою орієнтацію в просторі.

Поправте спрайт робота, щоб він став виглядати так (Спрайт - Костюми - Редагувати):
Ви можете помітити, що робот стоїть як нам, повернувшись праворуч. Всі спрайти в Scratch спочатку мають такий напрямок (напрямок 90 або "вправо"), який потім ви можете змінити "цеглинкою".
Поточну орієнтацію можна побачити в меню спрайту
або вивести на екран, позначивши в розділі Рух цеглу [ ] Напрям . Напрями позначені цифрами як: 90 - "вправо", 0 - "вгору, -90 - "вліво", 180 - "вниз".
Давайте видозмінимо попередню програму, задавши по натисканню клавіш вліво і вправо поворот робота. Для цього треба будевикористовувати блок. При повертанні робота зазвичай не використовують поняття "вліво" і "вправо", а кажуть, що Робот повинен повернутися "за годинниковою стрілкою" або "проти годинниковий"
Змініть у попередній програмі блоки керування стрілками таким чином:

Тепер запустіть програму. Ви побачите, що при натисканні на стрілки ліворуч або праворуч робот повертається на 90 градусів. Але якщо натиснути вгору або вниз, він починає зміщуватися, а не рухатися в напрямку стрілки. Це відбувається тому, що ми змішали системи координат. У нас тепер немає прив'язки до конкретних значень та точки відліку, тому необхідно використовувати команди виду "вперед" або "назад", вказавши, яке значення для переміщення.
Змініть блоки керування стрілками "вгору" і "вниз", використовуючи конструкцію . Це змусить робота переміститься в заданому напрямку на вказану кількість кроків (у разі Scratch це число пікселів на екрані). Вперед задаватиметься позитивним числом (+), а назад - негативним. У вас повинна в результаті вийти наступна програма:

Керованість (точність відпрацювання алгоритму)
Наш робот вже може керуватися з клавіатури і ви можете "ганяти" його екраном. Якщо ви виконали попередні завдання, знаєте як зробити робота більш керованим - тобто змусити його повертатися на більший або менший кут, змінювати швидкість його руху а також задавати початкову орієнтацію.
Але реальний робот має на жаль гіршу керованість (принаймні наш навчальний робот, якого ми зможемо запрограмувати надалі). Що це означає?
Реальний робот не може повернутися на точний кут (плюс-мінус певну кількість градусів), не може переміститися на точну кількість кроків і можливі затримки та пропускинаших команд через проблеми при передачі даних до Робота.
Навіть встановивши так званий "зворотний зв'язок" - тобто спеціальні пристрої, які зможуть сказати, що робот зробив дію з якоюсь точністю - ми все одно матимемо якусь похибку, а також вартість самого робота почне зростати.
У багатьох випадках точність робота з відпрацювання команд алгоритму не така важлива, як швидкість реакції на події та відпрацювання команд ззовні. Давайте подивимося, як впливає неточність відпрацювання команд алгоритму на нашого комп'ютерного робота. Для цього ми до кожної команди додамо випадкову складову. Наша програма набуде наступного вигляду:
Блоки повороту на випадкову величину під час руху вперед і назад потрібні, тому що реальний робот під час руху вперед зазвичай відклоняється в той чи інший бік через похибку роботи двигунів.
Ви можете відстежити поточне переміщення робота за допомогою "пере" у Scratch. Для цього додайте наступний блок:

Тепер після натискання клавіші "Пробіл" робот залишатиме за собою "слід".

А тепер зробимо так, щоб при натисканні стрілки вгору робот починав рухатися вперед, а при натисканні вниз зупинявся. Для цього потрібно помітити код алгоритму натискання цих стрілок на такий єдиний блок:

Що він робить? При натисканні на прапорець запуску починається робота нескінченного циклу і перевірка умовиЯкщо натиснута стрілка вгору. Як тільки воно виконано, починає виконуватися умоваПовторювати до, яка буде виконуватися в циклі, доки не буде натиснута стрілка "вниз". Усередині циклу умови розміщено код руху вперед з похибкою.
Якщо робот їде занадто швидко, зменшіть значення кроку і випадкової величини, наприклад, до 5 (а випадковувеличину від 1 до 2) або додати в цикл після "цеглинки" Іти затримку ("цеглинка") в 0.2-0.5 секунд.