Розуміння трансмісії вашого робота ===================================== Вступ ------------ Основна частина вашого XRP називається *трансмісія*. Ми називаємо її так, тому що вона утримує два колеса, які рухають вашого робота. Зокрема, XRP має *диференціальну трансмісію*. Це той самий тип трансмісії, який ви бачите на міні-навантажувачі. .. image:: media/skidSteerLoader.png :width: 300 .. image:: media/XRPImage.jpeg :width: 300 Робот XRP повертає за допомогою поворотного механізму, що означає, що під час повороту деякі колеса, іноді передні ролики, будуть ковзати. Це вимагає більше енергії для виконання поворотів і залежить від тертя передніх роликів та конкретної поверхні руху. До кожного колеса трансмісії вашого XRP прикріплений двигун. Ми можемо використовувати код , щоб вказати цьому двигуну, що ми хочемо, щоб він робив. Щоб робот рухався по бажаній траєкторії, потрібно встановити швидкість двох приводних двигунів. Існує безліч варіантів налаштування цих двигунів. Ось кілька основних прикладів: Їхати прямо ---------------- Найбільш фундаментальним рухом, який виконує робот, є рух прямо. Для цього обидва колеса рухаються вперед з однаковою швидкістю, щоб робот рухався прямо. .. image:: media/forwardsdriving.png :width: 300 Поворот по дузі ----------------- Роботи можуть повертати по дузі, коли одне колесо обертається швидше за інше, що змушує робота повертати в бік від швидшого колеса. Зі збільшенням різниці в швидкості між двома колесами поворот стає більш крутим. Якщо поворот триває, робот проїде повне коло. У цьому випадку радіус кола зменшується зі збільшенням різниці в швидкості коліс. .. image:: media/arcturn.png :width: 300 Поворот на місці ---------------- Однією з переваг XRP над системою керування автомобілем є те, що вона може повертати на місці, де робот повертає приблизно між двома колесами. Це дозволяє роботу легко виїжджати з вузьких просторів без необхідності робити широкий поворот по дузі. Поворот на місці часто використовується для переміщення робота між двома місцями, оскільки він слідує легко передбачуваним шляхом. .. image:: media/pointturn.png :width: 300 Поворот на одному колесі -------------------- Якщо одне колесо рухається вперед або назад, а інше залишається нерухомим, робот поверне на місці, причому центром повороту буде нерухоме колесо. Це часто називають поворотом з розворотом, оскільки робот розвертається навколо нерухомого колеса. При повороті з розворотом діаметр кола, яке описує зовнішнє колесо, вдвічі перевищує колію колеса. .. image:: media/swingturn.png :width: 300 Зусилля ------ Існує кілька способів, за допомогою яких ми можемо вказати двигунам, що робити. Найпростіша річ, яку ми можемо контролювати, — це *зусилля*, яке повинен застосовувати двигун. Уявіть, що ви їдете на велосипеді по рівній поверхні, крутячи педалі з нормальною швидкістю. Тепер уявіть, що ви натрапили на пагорб. Якщо ви продовжуєте крутити педалі з тією ж швидкістю, ви не сповільнитеся, піднімаючись на пагорб. Однак це не так просто! Вам доведеться крутити педалі *сильніше*, щоб піднятися на пагорб з тією ж швидкістю. А тепер уявіть, що, діставшись до пагорба, ви продовжуєте крутити педалі так само інтенсивно, як і на рівній ділянці. Ви підніметеся на пагорб повільніше, але не будете так втомлені. Це те, що ми маємо на увазі під *зусиллям* двигуна. Ви не вказуєте двигуну, як швидко він повинен рухатися, а скоріше, як сильно він повинен працювати. Якщо ви накажете двигунам вашого робота працювати з постійним зусиллям, швидкість вашого робота буде змінюватися залежно від того, рухається він по рівній поверхні чи по похилій. .. youtube:: z6aIVpf3qN0 .. youtube:: Zcr83kcO_Pk В обох відеороликах робот докладає однакових зусиль. У першому відеоролику робот повільно рухається вгору, оскільки сила тяжіння протидіє його зусиллям. У другому відеоролику робот швидко рухається вниз, оскільки сила тяжіння діє в тому ж напрямку, що і зусилля. Сила, що розвивається двигунами, однакова, але швидкість залежить від опору, що чиниться цій силі. .. tip:: Зусилля також подібні до педалі газу в автомобілі. Якщо ви підіймаєтеся вгору по схилу, вам потрібно натиснути на педаль газу сильніше, щоб зберегти ту саму швидкість на схилі. Якщо ви не натиснете на педаль газу сильніше, ви сповільнитеся. Перші рухи --------------- .. note:: Підніміть XRP на коробку або інший предмет, щоб колеса нічого не торкалися і могли вільно обертатися. Перш ніж керувати роботом, давайте напишемо простий код, щоб обертати одне з коліс. Це допоможе вам ознайомитися з середовищем програмування XRP і перевірити, чи правильно працює ваш XRP. .. admonition:: Спробуйте Створіть новий файл в IDE під назвою :code:`spin_wheels.py`. Додайте до нього наступний код: .. code-block:: python from XRPLib.defaults import * left_motor.set_effort(0.5) Запустіть код і подивіться, що буде. Розберемо код по рядках: :code:`from XRPLib.defaults import *` наказує вашому роботу завантажити код з **XRPLib**. Не переймайтеся надто тим, що означають усі команди в цьому рядку зараз, просто знайте, що ви будете розміщувати цей рядок у верхній частині більшості своїх програм XRP. :code:`left_motor.set_effort(0.5)` uвикористовує *функцію*, надану вам у **XRPLib** called :code:`set_effort` який застосовується до лівого двигуна. :code:`0.5` є *параметром* цієї функції, який вказує, що ми хочемо, щоб двигун застосовував 50% зусилля. У XRP ми записуємо відсотки у вигляді десяткових чисел від 0 до 1, де 1 дорівнює 100%. .. Пізніше поясніть функції більш детально (завдання з вітрячком?) .. *Функція* — це блок коду, який можна використовувати в програмі кілька разів. .. щоб спростити складні завдання. Наприклад, .. :code:`left_motor.set_effort()` функція дає команду лівому двигуну прикласти зусилля .. ви, як програміст, визначаєте. .. :code:`left_motor.set_effort` є функцією, яку ми надаємо вам у .. **XRPLib**. Пізніше в курсі ви побачите, як можна написати власний .. функції, що полегшують виконання роботом складних послідовностей дій. .. Коли ви хочете використати функцію, ви *викликаєте* її, вказавши її ім'я у своєму коді. .. Це призводить до запуску коду функції. .. Число, яке ви вказали в дужках, є *параметром* (іноді також .. називається *аргументом*) функції. Вони дозволяють вам повідомити .. функція повинна виконувати свою роботу. Як програміст, ви повинні надати *значення* .. для кожного *параметра*. Якщо ми хотіли б, щоб робот рухався вперед на повній .. швидкість, ми б *викликали* функцію таким чином: Тепер, коли ми перевірили лівий двигун, давайте перевіримо правий! Як ви думаєте, як потрібно змінити код, щоб запустити правий двигун? Просто замініть :code:`left_motor` на :code:`right_motor`. .. admonition:: Спробуйте Змініть код і запустіть його на роботі. Переконайтеся, що обертається правильне колесо. Притисніть до колеса якийсь предмет, наприклад олівець, щоб створити опір. Зверніть увагу, як колесо сповільнюється, коли ви це робите, оскільки йому потрібно більше зусиль, щоб зберегти ту саму швидкість. Рухаючись назад --------------- Ми змусили колеса обертатися вперед, але що робити, якщо ми хочемо рухатися назад? Для цього нам просто потрібно ввести *від'ємне* число для параметра effort. Це означає, що ми можемо використовувати будь-яке число від -1 до 1 для значення effort. -1 буде означати повну силу назад, 1 буде означати повну силу вперед, а 0 зупинить двигун. .. admonition:: Спробуйте Спробуйте написати код, який змусить обидва колеса обертатися назад. У цій таблиці наведено різні значення зусилля та відповідні дії колеса: .. list-table:: :header-rows: 1 * - Значення швидкості - Дія колеса * - 1 - Колесо обертається вперед із 100% зусиллям * - 0.5 - Колесо обертається вперед із зусиллям 50% * - 0 - Колесо перестає обертатися * - -0.5 - Колесо обертається назад із зусиллям 50% * - -1 - Колесо обертається назад при 100% зусиллі