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

17 марта 2014 г.

​Робот-стрелок из комплекта Lego Mindstorm 2.0 NXT. Пошаговая инструкция по сборке

(C)DIY
Введение:

В этой инструкции мы постараемся показать вам, в меру своих возможностей, как сделать робота Lego Mindstorm Turret Shooter, и главным образом мы будем использовать только фотографии, потому что это легко и наглядно. Все необходимые детали для этого робота вы найдете в комплекте 2,0 Mindstorm NXT.

DIY, lego-робот, nxt, nxt - LEGO роботы - Robotics

DIY, lego-робот, nxt, nxt - LEGO роботы - Robotics

1 марта 2014 г.

Запуск моторов в C программе на EV3

(C)
В прошлой статье мы разобрали как создать, закачать и запустить простую программу на С. Данная инструкция покажет, как можно использовать аппаратные ресурсы в Linux. Во время старта ядра Linux, оно загружает несколько модулей, которые дают доступ к "железу". После того, как эти модули были загружены, пользователь может "общаться" с "железом", используя стандартные файловые операции записи и чтения. Эта инструкция не имеет целью рассказать обо всех доступных функциях работы с аппаратными ресурсами.
Модули, доступные в EV3 блоке, могут быть отображены с помощью командыlsmod. Модули Lego, относящиеся к "железу", имеют префикс d_Имя в своем названии. Пример, представленный ниже, показывает один из способов управления моторами. Для того, чтобы скомпилировать этот код, я использовал переменные, объявленные в исходном коде прошивки EV3.

Как и в прошлой инструкции, надо создать папку для программы, файл программы motor.c и скопировать в нее следующий код:
Этот код - экспериментальный, используйте его на свой риск!

#include <fcntl.h>
#include “lms2012.h”
// Motor power 0..100
const int SPEED = 50;
// The motor operations use a single bit (or a combination of them)
// to determine which motor(s) will be used
// A = 0×1, B = 0×2, C = 0×4, D = 0×8
// AC = 0×5
const char MOTOR = 0×1;
int main()
{
   char motor_command[5];
   int file;
   //Open the device file
   if((file = open(PWM_DEVICE_NAME, O_WRONLY)) == -1)
      return -1; //Failed to open device
   // For most operations, the second byte represent the motor(s)
   motor_command[1] = MOTOR;
   // Start the motor
   motor_command[0] = opOUTPUT_START;
   write(file,motor_command,2);
   // Set the motor power
   motor_command[0] = opOUTPUT_POWER;
   motor_command[2] = SPEED;
   write(file,motor_command,3);
   // Run the motor for a couple of seconds
   sleep(2);
   // Stops the motor
   motor_command[0] = opOUTPUT_STOP;
   motor_command[1] = MOTOR;
   write(file,motor_command,2);
   // Close the device file
   close(file);
   return 0;
}


Следующие файлы должны быть скопированы в папку с программой: lms2012.h,bytecodes.h и lmstypes.h.
После создания motor.c и добавления всех необходимых файлов, код может быть скомпилирован:
arm-none-linux-gnueabi-gcc motor.c -o motor

Данная программа взаимодействует с модулем ядра d_pwm. Больше деталей о том, как можно управлять моторами, можно узнать из файла d_pwm.c в функции Device1Write.

Процедура загрузки программы на EV3 блок и ее запуска была приведена впрошлой статье.

Данная статья является переводом оригинальной статьи "Using the Motors" Lauro Ojeda с согласия автора.

Пятиминутка 2

(C)
pdf

 Finished

ROBOTC: эволюция языков программирования

(C)
Вчера в блоге RobotC появилось интересное сообщение, что в новой версии данной среды программирования создатели готовят свой графический язык программирования, чем-то напоминающий язык программирования Scratch.

До сих пор, среда программирования RobotC поддерживала только два языка: непосредственно RobotC - особый диалект C и Natural Language(иногда его называют "естественный язык").
Первый используется уже опытными программистами, основная аудитория второго - школьники, кто только начинает программировать на текстовых языках программирования. Carnegie Mellon University и RobotC позиционировали язык Natural Language, как переходный от графического языка NXT-G к текстовым языкам. По сути, в нем позволяется вместо низкоуровневых команд управления моторами и опроса датчиков использовать процедуры, название которых говорит о действии, которое робот будет выполнять:forward(), stop(), startMotor(), pointTurn(), untilRotations(), untilDark() и т.п. Полный список поддерживаемых функций с их описанием можно посмотреть здесь.
task main()
{
  forward(63);       //Включить моторы с мощностью в 63%
  untilLight(500);   //Ждать до тех пор, пока на сенсоре освещенности
                     //не станет светлее, чем 500 единиц
  stop();            //Остановить моторы
}



Кстати, данный диалект поддерживается, как для программирования NXT/VEX роботов, так и для RobotC Virtual Worlds.

Сейчас же компания, производящая среду программирования, объявляет о поддержке еще одного диалекта - графического языка программирования.


Язык с точки зрения пользовательских операций очень похож на Scratch - программирование осуществляется перетаскиванием графических блоков и соединенением их в пазл.
У блоков можно конфигурировать параметры, которые влияют на поведение робота. 
Каждый графический блок однозначно определяет текстовую конструкцию из языка Natural Language (NL). Там даже есть функция сгенерировать текстовую программу на NL.


Заинтересовавшиеся, могут посмотреть процесс программирования в этом небольшом ролике:


На видео видно, что количество поддерживаемых функций из Natural Language пока не велико. Авторы активно работают над пополнением библиотеки стандартных вызовов и обещают показать BETA версию продукта в январе 2014. Ждем с нетерпением! А пока полный текст анонса (на английском) можно увидеть на сайте RobotC.

RobotC Virtual Worlds и среда программирования NXT-G

(C)NiNoXT
Просматривая материалы на сайте RobotC можно обнаружить интересную "старую" новость - создатели популярной среды программирования сообщают о возможной будущей поддержке Виртуальными Мирами (RobotC Virtual Worlds - RVW) другой популярной среды программирования - NXT-G. Неожиданно, не так ли?!
Что это значит? А то, что теперь познавать основы программирования LEGO роботов смогут даже те школьники, у которых нет своего собственного NXT набора. Или даже еще лучше - целые робототехнические классы могут тренироваться в работе в среде NXT-G без необходимости иметь большое количество реальных роботов: к ним будут допускаться те ребята, кто сначала научил свой "виртуальный" механизм решению заданной задачи. 

EV3: можно ли использовать С++ программы на WRO? Часть I

(C)NiNoXT
Использование открытой операционной системы Linux на EV3 блоках - несомненно шаг вперед для LEGO-робототехников. Для них стали доступны следующие возможности:
1) исходные коды EV3 firmware выложены в репозиторий GitHub, а, значит, каждый желающий может ознакомиться с ними и, при необходимости, внеся изменения, собрать свою собственную версию прошивки для блока
2) есть возможность писать C/С++ приложения под Linux платформу и исполнять их на блоке - освоить библиотеку стандартных функций не так сложно.
При желании, это сможет сделать любой человек, увлекающийся программированием.

Следовательно, каждый может добавлять свои новые функции в firmware и эффективно использовать их непосредственно в Linux окружении, без ограничений вводимых средами программирования EV3-G и другими.

Ровно это и сделал Девид Гилдей, создатель нового робота из набора 31313 (LEGO Mindstorms EV3 Home edition), собирающего кубик-рубика за 101 секунду:


Чтобы понять, как такое удалось Девиду, необходимо разобраться, что же онсделал:

Итак, первое - изменение стандартной firmware (1.05M). Девид сделал небольшие улучшения, касающиеся работы с датчиком цвета. А также внедрил новую функциональность - автозапуск - теперь, если после загрузки проекта, созданного в среде EV3, на блок, в директории с проектом находится файлautorun.rtf, то он запускается на исполнение перед запуском непосредственно проекта.

Файл autorun.rtf может быть любым исполняемым файлом, и даже, в том числе, скриптом на языке Shell. Данный язык является стандартом для любого Linux дистрибутива, и поэтому его знает любой уважающий себя программист, работающий под этой операционной системой.

В примере данного конкретного проекта, файл autorun.rtf - скрипт и выглядит следующим образом:
#!/bin/sh
if [ -x mc3solver-v1p1.rtf ]
then
    ./mc3solver-v1p1.rtf &
fi
Делает он простейшую вещь: проверяет есть ли исполняемый файлmc3solver-v1p1.rtf и если есть, то он запускается, как фоновый процесс. Это значит, что после запуска этого процесса, его завершение не ожидается, а вместо этого управление передается обратно в скрипт, который завершает свою работу. После чего запускается непосредственно EV3 программа.

Второе:
Функция исполняемого файла mc3solver-v1p1.rtf - более-менее эффективное решение задачи кубик-рубика и выражение решения в терминах переворота кубика и поворота одной из граней. Написан он на языке высокого уровня С++, и скомпилирован по той же технологии, что описаны здесьздесьили здесь

"Третье" касается взаимодействия двух параллельно запущенных процессов и обмена данными между ними. Об этом подробнее в следующей части.

22 августа 2013 г.

Калибровка датчиков освещенности и звука

(C)http://legoms.ru

Условия внешней среды могут повлиять на чувствительность как световых, так и звуковых датчиков. Вот почему очень важно откалибровать эти датчики к конкретной обстановке (температура, освещенность, зашумленность) для более эффективной работы.

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

Есть два способа для калибровки светового и звукового датчика с помощью программного обеспечения MINDSTORMS NXT.

Первый заключается в использовании калибровки датчиков функции из меню Tools. С помощью этой функции, можно откалибровать световой или звуковой датчик, используя специальную утилиту MINDSTORMS NXT  (не используя вашу программу). Например, если вы посещаете соревнования LEGO MINDSTORMS NXT или изменили внешние условия  освещенности, вы можете откалибровать датчик света один раз у себя на столе и вам не придется беспокоиться о калибровке каждый раз, когда вы запустите программу.

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

 Используя функцию калибровки датчиков

Чтобы использовать эту функцию, сначала убедитесь, что ваш NXT подключен к компьютеру, и что он включен. Кроме того, убедитесь, что датчики, которые вы хотите калибровать подключены к NXT. Обратите особое внимание на порты, к которым они подключены. После проверки выберите функцию калибровки датчиков в меню Tools. При этом появится диалоговое окно "Калибровка датчиков". Если Lego NXT не подключен к компьютеру, диалоговое окно будет неактивно.
Колибровка датчиков освещенности и звука MINDSTORMS NXT
Калибровка датчика света

Выберите датчик освещенности ("Light Sensor") и укажите, к какому порту подключен  датчик (1, 2, 3, 4). Затем нажмите на кнопку Калибровка ("Calibrate"). После этого, в контроллер NXT будет загружена программа для калибровки датчика, она запустится автоматически.

На экране NXT  вы увидите текст: "Минимальное значение:". Создайте для датчика условия, соответствующие минимальной освещенности. Нажмите оранжевую кнопку "Enter" на NXT.

Далее вы увидите текст, который гласит: "Максимальное значение". Создайте для датчика условия, соответствующие максимальной освещенности .  Нажмите оранжевую кнопку "Enter" еще раз.

Калибровка завершена.

Калибровка датчика звука

Выберите датчик звука ("Sound Sensor") и укажите, к какому порту подключен датчик. Затем нажмите на кнопку Калибровка ("Calibrate"). После этого в контроллер NXT будет загружена программа для калибровки датчика, она запустится автоматически.

На экране NXT  вы увидите текст: "Минимальное значение:". Создайте для датчика условия, соответствующие минимальному уровню шума. Нажмите оранжевую кнопку "Enter" на NXT.

Далее вы увидите текст: "Максимальное значение". Создайте для датчика условия, соответствующие максимальному уровню шума.  Нажмите оранжевую кнопку "Enter" еще раз.

Калибровка завершена. 

Примечание:
  • Значения калибровки  устанавливаемые с помощью функции калибровки датчиков могут быть перезаписаны. Самая последняя калибровка будет иметь преимущество. Калибровка будет оставаться в силе, пока вы не перекалибруете или не сбросите их.
  • после завершения процесса калибровка будет работать для конкретного датчика независимо от того, какой порт вы подключаете. Если вы проводили калибровку датчика освещенности на порту 3, калибровка останется в силе, даже если вы переключите датчик света на порт 4.
Восстановление значений калибровки по умолчанию

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

Во-первых, включите NXT, и подключите его к компьютеру.

Выберите калибровки датчиков - пункт меню "Tools". Появится диалоговое окно "Калибровка датчиков" ("Calibrate Sensor").

Выберите датчик, которому нужно восстановить заводские настройки и нажмите  кнопку "По умолчанию" (Default).

Управление файлами и памятью контроллера LEGO MINDSTORM NXT2.0

(C)http://legoms.ru

Иногда бывает необходимо управлять файлами, которые находятся в памяти NXT. Вы можете сделать это с помощью встроенного механизма доступа к памяти.
Для этого нужно подключить контроллер NXT компьютеру и на панели управления "кликнуть" по левой верхней кнопке.
Управление файлами и памятью контроллера LEGO MINDSTORM NXT2.0
В открывшемся окне появится графическое представление памяти NXT. В данном окне вы можете управлять программами и файлами, которые находятся в памяти контроллера. Вы можете выкачивать программы, звуки, графически и другие файлы с NXT на ПК, а также копировать и удалять файлы, которые уже находятся в памяти NXT.
 Описание окна управления памятью контроллера LEGO MINDSTORM NXT2.0
 Описание окна управления памятью контроллера NXT:
  1. Графическое представление занятой и свободной памяти.
  2. Различные категории файлов (программы, звук, графики и другие), которые занимают память NXT. Нажав на названии категории, вы увидите эти типы файлов в списке.
  3. Список файлов в выбранной категории.
  4. "Delete" - удалить. Эта кнопка удаляет все выбранные файлы из NXT.
  5. "Download" - скачать. Эта кнопка загрузки файлов с компьютера на NXT.
  6. "Upload" - загрузить. Эта кнопка будет копировать ваши файлы из NXT в ПК.
  7. "Delete All" - удалить все. Эта кнопка удаляет все пользовательские файлы и очищает память NXT.
  8. "Show System Filees" - показать системные файлы. Отметив этот флажок, вы увидите все файлы NXT, установленные на заводе .
Память контроллера NXT2.0

Контролер NXT имеет доступную память ~130,7 килобайта. Часть этой памяти используется для хранения программ, графических и звуковых файлов, которые предварительно загружены в NXT (пред. установка). Остается около 56 килобайт для файлов, которые вы можете создать или загрузить.

Удаление файлов из памяти NXT

Вы можете стереть все ваши файлы и очистить память NXT, нажав кнопку "Удалить" все файлы. Это действие удалит все файлы, которые когда-либо были загружены в память NXT и освободит ее для новых файлов.

Примечание: В редких случаях вы можете получить сообщение об ошибке "Недостаточно памяти", даже если графическое представление памяти (1) указывает на наличие свободного места. Это связано с тем ,что память "фрагментирована". Исправить эту ситуацию можно, используя кнопку "Удалить все файлы" пользователя. НО перед этим не забудьте сделать резервную копию всех важных файлов!

Вот список системных файлов и их описание:

Категория 

 Имя файла  Описание 

 Системные  NVConfig.sys

В нем хранятся системные параметры. Если вы удалите этот файл, новый будет создан автоматически. 
 Системные  Try-*.rtm  

 Файл конфигурации входов и выходов. Если выудалите этот файл, новый будет создан автоматически. 
 Системные  RPGreader.sysЭта программа позволяет запускать NXT программы (программы, которые создаются средствами NXT, используя иконки NXT Program). Удаление этого файла сделает невозможным создавать программы  средствами NXT. Программы, созданные и загруженныес компьютера все равно будут работать. 
 Системные  *.tmp  Любой файл с расширением ". tmp" является временным файлом. Временные файлы всегда можноудалить. 
 Системные  *.bak  Любой файл с расширением ". bak" являетсявременным файлом. Временные файлы всегда можноудалить. 
 Графические

 faceopen 

 Изображение головы LEGO Minifig (с открытым ртом)
 Графические

 faceclosed    

 Изображение головы LEGO Minifig  закрытым ртом)
 Звуковые  

 Woops    

 Звуковой файл используется в тестовой программе.Удаление этого файла сотрет звук из программы. Сама программа будет работать без звука. 
 Звуковые  

 ! Startup  Звуковой файл воспроизводится при запуске NXT.Удаление этого файла сотрет звук при запуске. 
 Звуковые  

 ! Click  Звуковой файл воспроизводится при нажатии кнопкина NXT. Удаление этого файла сотрет звук при нажатии кнопки на NXT. 
 Звуковые     

 ! Attention  

 Звуковой файл воспроизводится, когда NXT выдает предупреждение. Удаление этого файла сотрет звук при появлении предупреждения. 
 Программа  

 Demo   

 Демо-программа, удаление которой сотрет демо-программу с NXT. 

 Восстановление памяти NXT  в соответсвие с заводскими настройками


При обновлении прошивки NXT будет очищена вся память контроллера и загружены все файлы по умолчанию. Чтобы сделать резервную копию ваших личных файлов и совместного использованных файлов хранящихся на NXT, вы должны скопировать файлы с NXT на компьютер. Для этого сначала выберите категорию (2) для требуемых файлов, которые вы хотели бы сохранить в резервной копии. Выберите нужные файлы в списке (3) и нажмите кнопку Загрузить (7). Выберите папку, в которую будут сохранены файлы на вашем компьютере и нажмите кнопку ОК.

  Загрузка файлов в NXT

Чтобы отправить файл обратно в NXT, нажмите кнопку Download (5). Выберите файл, который вы хотите скопировать с компьютера и нажмите кнопку OK.

Создание редактирование и импорт графических файлов для NXT

(C)http://legoms.ru
В програмной среде LEGO MINDSTORMS предусмотрена возможность создания, редактирования и импорта графических файлов для своих программ с их изображением на экране дисплея. Для этого существует специальный инструмент "Image Editor". Чтобы вызвать его, необходимо выбрать в меню "Tools->Image Editor".
Экран редактора имеет разрешение 100 пикселей в ширину и 64 пикселей в высоту, являя собой точную копию экрана NXT. Редактор "Image Editor" позволяет открывать для редактирования четыре типа форматов: ric, jpg, png, и bmp.

Редактирование изображений 
Процесс редактирования происходит в 3 этапа:
  1. Нажмите на "Открыть", чтобы выбрать и импортировать существующие файлы изображений с компьютера или с помощью палитры инструментов, чтобы начать создавать свои собственные изображения с нуля.
  2. Изменять изображения можно с помощью палитры инструментов в левой части экрана редактирования.
  3. Сохраните файл на вашем компьютере (файл будет сохранен в директорию программы LEGO SoftwareLEGO MINDSTORMS NXTenginePictures ) .
Импорт файлов изображений
Создание редактирование и экспорт графических файлов для NXT
  1.  Откройте любое изображение для редактирования со своего компьютера. По умолчанию программа открывает папку с изображениями в LEGO ® Software MINDSTORMS ®.
  2. Вырежьте часть изображения, которое вы хотите отредактировать, используйте для этого масштабирование и панорамирование изображения, щелкнув и переместив его.
  3. Установите уровень детализации, который вам нужен с помощью ползунка порога.
  4. Экран редактирования имеет такое же количество пикселей, изображение как и экран NXT, поэтому любые изображения, редактированные или созданные с помощью этого редактора всегда подходят для дисплея NXT.
  5. Окно предварительного просмотра справа "Preview" позволит вам увидеть ваше изображение так, как это будет выглядеть на дисплее NXT.
 Создание редактирование и экспорт графических файлов для NXT
 Рисование от руки
  Графический редактор "Image Editor " позволяет рисовать "от руки", для этого имеются инструменты:
  1. Карандаш
  2. Рисование прямоугольников
  3. Рисование эллипсов
  4. Выделение области
  5. Рисование прямых линий
  6. Заливка
  7. Удаление части изображения
  8. Вставка текста
  9. Задание толщины линии
  10. Отмена или повтор шага редактирования
  11. Буфер показывает скопированное изображение
  12. Вырезать выделенную часть изображения
  13. Скопировать выделенную часть изображения
  14. Вставить часть изображения из буфера обмена
 Примечание: вставленное изображение может быть перемещено, пока оно выделено оранжевым цветом. Как только оно станет черным, оно больше не может быть перемещено на экран редактирования.

 Как сохранить изображение в другом формате
 Программа NXT автоматически сохраняет все изображения в формате  RIC. Чтобы сохранить изображения в другом формате, задайте его имя и задайте его  расширение JPG или PNG.