![]() |
![]() |
Controlling the Motors
|
Управление моторами
Это перевод, оригинал находится здесь Введение в класс Motor.Класс Motor предоставляет доступ к управлению моторами NXT. Для того, чтоб использовать моторы, они должны быть подключены к одному из трёх "моторных" портов NXT. Класс предоставляет экземпляр для каждого порта. Это: Motor.A, Motor.B и Motor.C. Каждый из этих трёх объектов - это экземпляр класса NXTRegulatedMotor. Этот класс предоставляет методы для управления мотором и для узнавания, в каком состоянии сейчас находится мотор. Мы предлагаем вам написать пять программ. С этими программами вы можете проводить эксперименты, которые помогут вам понять, как работают моторы NXT. Они достаточно просты, так что вам не понадобится особенно большой опыт в использовании языка Java (не считая умения программировать циклы). Наконец, мы предлагаем вам ознакомиться с другими методами управления моторами , которые не используются в программах, но могут быть полезны. Программа 1 - Основы управления движением.Эта программа использует самые основные методы управления мотором, которые контролируют движение мотора. Они перечислены ниже, вместе с другими методами, которые вам могут понадобиться при написании программы. Методы, использованные в этой программе
Что программа должна сделать:
Программа 2 - Использование тахометра.У мотора NXT есть встроенный тахометр, который отслеживает текущий угол оси мотора (в градусах). Цель этого эксперимента - узнать, как быстро останавливается мотор. Программа попытается сделать в точности 4 оборота. Будет использовано два разных подхода, чтоб выполнить эту задачу. Первый подход: настроить мотор на вращение с частотой 2 оборота в секунду и остановить его через 2 секунды. Второй подход: останавить мотор когда он совершит 4 оборота по показаниям тахометра. Новые методы, используемые в этой программе
Что будет делать эта программа
При первом эксперименте обратите внимание, что команда на остановку выдаётся до того, как мотор завершил выполнение 4 оборотов за 2 секунды и что остановка не происходит мгновенно из-за инерции. Программа 3 - Точное управление вращением.У класса Motor есть специальный поток (thread) который всё время работает. У него две главных задачи, одна из которых - остановить мотор при заданном угле. Эта программа будет тестировать точность методов, предназначенных для точного управления вращением. Есть два варианта этого метода. Основной метод возвращает управление только когда вращение уже завершено, другой вариант метода возвращает управление немедленно, но мотор останавливается, когда поворот на нужный угол будет сделан. Новые методы, использованные в этой программе
Что программа должна сделать
Обычно мотор останавливается в пределах 1 градуса от указанного угла, если поток, регулирующий вращение мотора справляется со своей работой. Он работает, вычисляя, как далеко мотор прокрутится после начала торможения и начинает тормозить до того, как достигнет заданного угла. Пронаблюдайте: Как только мотор остановился, если вы попытаетесь провернуть его рукой, он будет сопротивляться и даже может вернуться обратно в позицию, в которой он остановился. Наверх страницыПрограмма 4. Прерывание вращенияИногда вам может понадобиться, чтоб мотор остановился (или сделал что-нибудь ещё) до того, как он достигнет указанного угла. Эта программа обнаружит нажатие кнопки и завершит задачу вращения мотора если вы нажмёте кнопку достаточно быстро. Метод rotate() не возвращает управление пока мотор не остановится на заданном угле. Но новый метод, использванный в этой программе умеет возвращать управление немедленно. Мотор остановится на заданном угле, если только какой-либо другой метод управляющий мотором не будет вызван, пока идёт вращение. Новые методы, использованные в этой программе
Что программа должна сделать
Обратите внимание: если вы нажмёте кнопку до того как вращение остановится, мотор остановится не завершив вращения. В противном случае, вызов метода stop() не будет иметь какого-либо эффекта. Наверх страницыПрограмма 5: Регулирование скорости вращения мотораДругая основная задача регулирующего потока (regulator thread) - контролировать скорость вращения мотора.
Одна из причин делать это в том, что тележка, у которой два колеса ведущие будет двигаться прямо только если они оба вращаются с одной и той же скоростью (это очевидно). Стандартная прошивка Lego решает эту задачу путём прямой синхронизации двух моторов. NXJ использует другой подход: поддержание вращения каждого мотора синхронизированным с системным тактовым генератором (system clock). Регулятор сравнивает показания тахометров (за вычетом начальной отметки) со скоростью раз за разом и подстраивает мощность моторов так, чтоб удержать эти два показателя практически равными. Поток регулятор сбрасывает начальную отметку и затраченное время в ноль и начинает сравнение заново всякий раз, когда вы вызываете любой из методов, которые здесь были описаны.
Эта программа позволит вам поэкспериментировать с эффективностью механизма регулирования скорости во время удержания моторов синхронизированными. Что программа должна сделать:
Моторы должны остаться в пределах 1-2 градусов по отношению друг к другу как только целевая скорость будет достигнута. Когда возможна ситуация, что вам понадобится отключить регулировку скорости?В некоторых роботах скорость двигателя не должна быть константной, но должна изменяться в ответ на показания датчиков, как в примере с роботом, который идёт вдоль линии или как в примере с балансирующим роботом. Если коррекция скорости происходит часто, то никакого смысла точно выдерживать скорость между её изменениями нет (т.к. на такую регулировку тратится производительность процессора). Чтоб использовать мотор в нерегулируемом режиме, необходимо создать экземпляр класса NXTMotor. Например:
У NXTMotor есть многие из методов NXTRegulatedMotor, но вместо метода setSpeed, у него есть метод setPower, и, т.к. у него нет потока-регулятора (regulation thread), он не поддерживает методов управления вращением. Когда вы должны использовать регулирование скорости?Если вы указываете очень медленную скорость, мощность мощность, необходимая для её поддержания, может быть недостаточной чтоб преодолеть внутреннее трение мотора, поэтому мотор никогда не придёт в движение. В этом случае вызов rotate() никогда не вернёт управление. Но с включённым регулированием скорости регулятор будет поддерживать нарастающую мощность пока мотор не достигнет заданной скорости.
Можете ли вы смешивать эти два метода управления мотором?Да, можете. Просто создайте экземпляры обоих классов NXTRegulatedMotor и NXTMotor для одного и того же порта мотора. Когда нужно будет использовать метод setPower просто отключите управление мотором путём вызова suspendRegulation в экземпляре NXTRegulatedMotor. Некоторые другие методы управления моторомУзнавание, что мотор делает в данный момент
Различные другие методы
Методы NXTMotor
|