ДО курс по робототехнике

Показаны сообщения с ярлыком python. Показать все сообщения
Показаны сообщения с ярлыком python. Показать все сообщения

5 апреля 2013 г.

NXT и Python: мотор застрял?

(C)
Предыдущие статьи по программированию NXT роботов на языке Python можно считать вводными - они вкратце знакомили с базовыми API, применив которые можно было уже написать простые программы.
Естественно, многое осталось за рамками тех материалов - например, функции, управляющие движением моторов, были описаны не все, да и дляописанных не были указаны все возможные параметры.

Если попробовать запустить робота с небольшими (меньше 50 процентов) параметрами мощности с помощью функции run() - такое, к примеру, возможно при движении тележки вдоль черной линии по PID регулятору, то соответствующий мотор может вообще не начать вращаться. Причем, при этом сам мотор может выдавать высокочастотный писк.

На самом деле метод run() принимает еще один параметр, кроме мощности мотора:

run(self, power=100, regulated=False)
    Tells the motor to run continuously. If regulated is True, then the
    synchronization starts working.

Как видно из документации, параметр принимает False как значение по-умолчанию. При этом, какого рода синхронизация и зачем она нужна в документации описания нет.

Однако, когда при запуске мотора передаем в качестве значения этого параметра True, то мотор работает как и ожидается.

Видео ниже демонстрирует, как мотор работает при разных значениях этого параметра.

Установка nxt-python модуля под Windows

(C)
Не смотря на то, что на блоге было опубликовано уже много статей посвященных программированию LEGO роботов на языке Python,еще не было заметки, которая бы помогала настроить среду программирования на операционной системе Windows (хотя под Linux уже было одна).
Поэтому пора восполнить этот пробел.

Будем подразумевать, что сам язык программирования уже установлен на компьютере и следующий шаг установить все остальное программное обеспечение, необходимые для работы с NXT блоком. Единственное, что хочется добавить, что поскольку другие модули python, которые понадобятся для аспектов программирования роботов, поставляются только для 32битной ОС, то и python придется поставить в его 32битной версии.

Все начнется с установки модуля nxt-python, который можно скачать здесь. Скачав ZIP архив, необходимо распаковать его в удобное место, желательно, чтобы путь при этом получился не очень длинный, поскольку потом его придется вбивать руками в командной строке. Затем, запустите командный интерпретатор cmd.

NXT и Python: опрашиваем датчики

(C)
Базовые способы работы с моторами в Python были рассмотрены в прошлой заметке - теперь настало время осветить, какие API (applications programming interface) доступны для работы со стандартными LEGO NXT датчиками.
Начнем с того, что посмотрим на модуль nxt.sensor, который предоставляет классы по работе с датчиками. Для этого в Python Shell запросим справку по модулю:
import nxt.sensor
help(nxt.sensor)
Небольшая информационная страничка расскажет, что данный модуль предоставляет доступ к следующим под-модулям:
  • analog
  • common
  • digital
  • generic
  • hitechnic
  • mindsensors
Т.е. видно, что помимо стандартных датчиков, библиотека nxt-python поддерживает работу и с датчиками известных производителей Mindsensors и HiTechnic. 

NXT и Python: готовимся к работе

(C)
С точки зрения простоты обучения языки программирования можно разделить на две группы:

  • для начала программирования на одних надо прочитать толстые книжки
  • осваивать вторые можно уже с первых страниц учебника и показательных примеров
Одним из языков, относящихся ко второй категории, можно отнести язык программирования Python. Это скриптовый язык, т.е. его не нужно компилировать, а также он доступен, как в Windows, так и Unix-подобных операционных системах.

Чтобы получить понятие о простоте языка, можно посмотреть на банальный пример – вывод строчки на экран. В этом случае, скрипт будет состоят всего из одной строчки:
print "Hello, Robot!"

NXT и Python: подключаемся к NXT блоку

(С)
Любая Python-программа, которая будет взаимодействовать с Lego-роботом, прежде чем выполнять на нем какие-либо действия, должна подключиться к NXT блоку.
Без этого действия не получиться проинициализировать ни моторы, ни сенсоры.

Еще это действие нужно для того, чтобы указать каким именно NXT блоком вы хотите управлять, если к компьютеру сейчас подсоединено несколько.

В программе, для подключения, сначала нужно импортировать под-модульlocator из модуля nxt.

NXT и Python: включаем моторы

(С)
Традиционно изучение программирования Lego-роботов начинается с простых экспериментов с движением - именно эта функция в роботах используется чаще всего.
К тому же, при такого рода знакомстве, обычно сразу видно, что механизм делает и на сколько корректно.

Чтобы узнать, какие функции модуля nxt-python нужно использовать, чтобы заставить робота двигаться, можно использовать два способа. В одном случае, можно воспользоваться свойством открытости - языки с открытым исходным кодом тем и хороши, что позволяют зайти в любой модуль, любую функцию и посмотреть для чего она нужна и что она делает. Другой способ, воспользоваться встроенной в Python функцией подсказки - например, через терминал, предоставляющий доступ к командной строке в Linux:
$ python
Python 2.7.2 (default, Oct 27 2011, 01:36:46) 
[GCC 4.6.1 20111003 (Red Hat 4.6.1-10)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import nxt.motor
>>> help(nxt.motor)
Итак, что можно почерпнуть из этих источников?