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

суббота, 16 марта 2013 г.

Инфракрасный датчик расстояния от SmartBricks

Не секрет, что юные робототехники страны (и их педагоги) готовятся к традиционным весенним соревнованиям. Зная это, компания SmartBricks желает им помочь.
Первое, что они сделали - заключили соглашение с всероссийским комитетом WRO и добились разрешения на использование световых датчиков собственного производства в отборочных этапах МСР. Второе - это выпуск нового датчика, который все желающие могут использоваться для более точного определения расстояний.

Встречайте, инфракрасный датчик расстояния:

четверг, 7 февраля 2013 г.

Аналоговые датчики NXT и Raspberry PI

Компания Dexter Industries не остановилась на достигнутом и выложила в интернет инструкцию по подключению аналоговых датчиков (пока только датчик касания) к Raspberry PI плате.

Принцип работы с аналоговыми датчиками отличается от I2C датчиков, поэтому другие выходы используются на плате - GPIO7.

Python скрипт, демонстрирующий работу с этим выходом, использует RPi.GPIO модуль. Из текста программы видно, что явно обрабатывается событие повышения уровня сигнала на соответствующем выходе платы, т.е. пока что не очевидно как будет построена работа с другими аналоговыми датчиками, которые измеряют непосредственно уровень сигнала, а не его изменение.

пятница, 1 февраля 2013 г.

Подключение цифровых NXT датчиков к Raspberry PI

Когда только появилась информация о том, что в новом Mindstorms EV3 стоит Linux, почему-то в голове возникла мысль о Raspberry PI - небольшом одноплатном компьютере, к которому можно подключить множество стандартных устройств вроде клавиатуры, монитора и т.п., - потому что на нем тоже крутиться эта же операционная система. Ведь по сути блок EV3 лишь по некоторым параметрам проигрывает Raspberry PI, да еще обладает встроенной возможностью подключения моторов и датчиков.
Как оказывается, последнее - подключение датчиков, - не является прерогативой LEGO устройства. Распайка платы Raspberry PI тоже позволяет подключать цифровые датчики, а I2C шина операционной системы Linux известна уже давно.

Известная своими датчиками, подключаемыми к NXT блоку, компания Dexter Industries выложила у себя на сайте статью, подробно рассказывающую как подключать цифровые датчики, совместимые с NXT блоком, к Raspberry PI компьютеру.

В основе статьи лежат следующие шаги:
  1. Подключение датчика посредством NXT Bread Board Adapter


    к соответствующим выходам на плате Raspberry PI.

  2. Загрузка I2C модулей ядра на Raspberry PI устройстве.
  3. Написание Python скрипта работающего на устройстве и опрашивающего датчик.
Смотрим, что у них получилось:


Судя по схеме, на Raspberry PI есть выходы UART, а это значит, что цифровые датчики EV3, тоже будет подключить не проблема.

Остается открытым вопрос - а LEGO моторами так управлять возможно? Единственное ограничение, которое пока видится, это питание моторов - Raspberry PI не отдает 9 вольт, а только 5.

понедельник, 28 января 2013 г.

Цифровые датчики SmartBricks: не NXT-G единым...

Тому, что на блоге не было давно статей с детальным обзором датчиков SmartBricks, есть одно объяснение - предыдущие обзоры рассматривали аналоговые датчики, которые по поведению ничем ни отличались от уже существующих LEGO датчиков, поэтому и при их программировании в тестах применялись те же самые средства, что и для обычных датчиков.
Для новых цифровых датчиков в языках Python и NXC, использовавшихся для обработки данных в тестах, нет готовых библиотек для опроса SmartBricks датчиков. Поэтому, прежде чем проводить эксперименты с новым датчиком, нужно было разобраться с протоколами связи с датчиками и реализовать соответствующий функционал в языках программирования.

Следует отметить, что для среды программирования NXT-G, компания SmartBricks предлагает для загрузки уже готовые блоки, а также и примеры их использования. Но по причине неудобства использования этой среды в целом для тестирования - это больше касается возможностей взаимодействия с компьютером, нежели самого процесса программирования и производительности, было решено не использовать NXT-G для подготовки обзоров.

Прежде, чем перейти описанию того как работать с цифровыми датчиками в языках NXC и Python, нужно сначала обратить внимание на, то как устроен интерфейс общения NXT блока с датчиком через протокол I2C. В целом, неплохая вводная есть известной книге "Extreme NXT: Extending the LEGO MINDSTORMS NXT to the Next Level" (*) и есть надежда, что это описание перекочует в "перевод" на русский язык, который делается энтузиастами из Оренбурга. Сейчас же, в двух словах можно сказать, что цифровой датчик по сути представляет из себя отдельное вычислительное устройство, которое может отдавать данные - обработанные результаты измерений, причем обработка измерений может контролироваться снаружи - на устройство могут подаваться входные данные, задающие правила вычислений, или переменные, участвующие в этих вычислениях. Иными словами, NXT блок может передавать в датчик данные по I2C шине и считывать из датчика данные.

воскресенье, 25 ноября 2012 г.

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

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

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

четверг, 8 ноября 2012 г.

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

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

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

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

воскресенье, 14 октября 2012 г.

Python, NXT и компьютерное зрение

OpenCV (Open Source Computer Vision Library) - библиотека алгоритмов компьютерного зрения, обработки изображений и численных алгоритмов общего назначения. Она обладает большим потенциалом, который позволяет применять ее в робототехнических нуждах, так что роботы могут, подобно человеку, взаимодействовать с предметами окружающего мира - выделять и распознавать их, реагировать соответствующим образом.
Библиотека поддерживается многими языками программирования, в том числе и Python. А это значит, что благодаря модулю nxt-python, для LEGO роботов тоже можно проектировать программы, использующие в своей основе алгоритмы компьютерного зрения.

Для примера, можно рассмотреть такую возможность, как слежение за цветными объектами - пусть тележка с LEGO-пассажиром будет стремиться всегда находиться в поле зрения web-камеры:

суббота, 6 октября 2012 г.

Python и MotorControl

В предыдущей заметке уже упоминалось о том, что модуль nxt-python для языка программирования Python уже имеет встроенную поддержку инструмента по управлению моторами MotorControl.
По сути, это заключается в следующем:
  • в составе архива модуля есть скомпилированный исполняемый модуль MotorControl22.rxe (22 - это версия модуля - 2.2), который можно загрузить на NXT блок с помощью поставляющегося в архиве скрипта nxt_push или программы NeXTTool, доступной для загрузке на сайте BricxCC. Тут же есть и исходный код, который можно собрать исполняемый файл с помощью компилятора NXC непосредственно или с помощью среды BricxCC
  • в самом модуле nxt-python доступен набор методов класса MotCont, реализованного в под-модуле nxt.motcont, обеспечивающих обмен сообщениями по USB/Bluetooth с управляющей программой MotorControl. Примечательным фактом является, что никакого специального объекта этого класса создавать не надо. Он автоматически создается в результате инициализации объекта Brick, т.е., например, доступен сразу после того, как объект Brick вернется функцией find_one_brick(). К объекту класса MotCont в этом случае можно обращаться через имя mc (см. пример ниже).

суббота, 29 сентября 2012 г.

Raspberry Pi - расширяем возможности NXT блока

Raspberry Pi - одноплатный компьютер, размером с кредитную карточку и стоимостью 25$. Несмотря на свой маленький размер, он обладает достаточно серьезными вычислительными ресурсами и поддерживает множество периферийного аппаратного обеспечения, благодаря наличию стандартных разъемов (USB, Ethernet и HDMI) и поддержке стандартных протоколов.
Поскольку это все-таки компьютер и на нем стоит полноценная операционная система семейства Linux, то к нему можно подключить NXT блок. А это, из-за крошечного размера компьютера, открывает новые горизонты перед людьми, увлекающихся LEGO-робототехникой - робот теперь сможет возить дополнительные вычислительные мощности с собой.

понедельник, 24 сентября 2012 г.

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

Базовые способы работы с моторами в 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.

воскресенье, 16 сентября 2012 г.

Скорость опроса сенсоров

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

Итак, сначала надо определиться с методикой определения частоты опроса датчика.
Предлагается такой алгоритм:
  1. Инициализируем датчик
  2. Запоминаем текущее значение таймера (или сбрасываем таймер в ноль)
  3. Делаем N итераций цикла, который делает только одно действие - опрашивает датчик
  4. После завершения цикла запоминаем новое значение таймера, а точнее на сколько он изменился с шага 2.
В результате, поделив количество итераций на время, которое они заняли, станет известно сколько итераций выполниться за 1 секунду.

суббота, 23 июня 2012 г.

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)
Итак, что можно почерпнуть из этих источников?

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

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

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

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

среда, 13 июня 2012 г.

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

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

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

воскресенье, 3 июня 2012 г.

Lego Mindstorms на Linux Install Fest 12.04 в Нижнем Новгороде

Неделю назад, 27 мая в Нижнем Новгороде проходил Linux Install Fest, проводимый активистами Нижегородской группой пользователей Linux. Цель мероприятия - ознакомить участников фестиваля с последними новинками среди Свободного Программного Обеспечения (СПО), в том числе с последними дистрибутивами ОС Linux.
Также здесь можно было узнать, какие аналогичные программные пакеты СПО можно использовать взамен проприетарного, найти ответы на вопросы, связанные с Linux и СПО, да и просто свободно пообщаться с единомышленниками, завести новые полезные знакомства.

Одной из презентаций на данном мероприятии, был доклад, посвященный LEGO. Основной задачей доклада было рассказать, что в ОС Linux, тоже существует возможность программировать LEGO роботов. Особенно актуально это может быть для преподавателей таких школ, где в целях экономии было принято решение перейти на СПО, таким образом становятся недоступными такие среды программирования, как NXT-G, LabView, RobotC и т.п.
Related Posts Plugin for WordPress, Blogger...