Как стать автором
Обновить

Lego Mindstorms NXT Работа в MATLAB (Начало)

Lego Mindstorms NXT Работа в MATLAB (Начало)



О NXT тут уже было написано много слов, но я не нашел упоминания методов работы с NXT в серьезных инженерных средах. Постараюсь исправить данный недочет.
Разговор пойдет о MATLAB.

Для начала небольшое лирическое отступление.

MATLAB
Материал из Википедии — свободной энциклопедии

MATLAB (сокращение от англ. «Matrix Laboratory») — термин, относящийся к пакету прикладных программ для решения задач технических вычислений, а также к используемому в этом пакете языку программирования. MATLAB используют более 1 000 000 инженерных и научных работников, он работает на большинстве современных операционных систем, включая GNU/Linux, Mac OS, Solaris и Microsoft Windows.
ru.wikipedia.org/wiki/MATLAB#MEX-.D1.84.D0.B0.D0.B9.D0.BB.D1.8B

Lego Mindstorms
Материал из Википедии — свободной энциклопедии
Lego Mindstorms — это конструктор (набор сопрягаемых деталей) для создания программируемого робота, представленный компанией LEGO в 1998 году. В 2006 в свет вышла модель Lego Mindstorms NXT. Базовый набор поставляется в двух версиях: версия для широкой продажи и базовый обучающий набор. Оба набора могут быть использованы для участия в соревнованиях фестиваля робототехники FIRST в Lego League. В наборе идет среда графического программирования NXT-G, но существует неофициальные языки программирования типа Robolab, NXC, NBC, leJOS NXJ и RobotC. В январе 2009 года был анонсирован новый набор Lego Mindstorms NXT 2.0. Создателями был представлен новый датчик цвета и некоторые другие возможности.
ru.wikipedia.org/wiki/LEGO_Mindstorms

nxtOSEK

nxtOSEK — Операционная система реального времени (RTOS) для Lego Mindstorms.
ANSI C/C++ среда программирования используя GCC tool chain
C API для работы с сенсорами(моторами и другими устройствами) NXT
C++ API для работы с сенсорами(моторами и другими устройствами) NXT
TOPPERS/ATK многозадачность реального времени проверенная в индустрии автоматизации
TOPPERS/JSP многозадачность реального времени соответствующая спецификации RTOS μITRON 4.0
Быстрое исполнение при малом потреблении оперативной памяти (nxtOSEK программы выполняются в нативном коде ARM7, а сама RTOS nxtOSEK потребляет всего около 10Kbytes)
Три пути загрузки программ nxtOSEK в NXT
1.Используя расширенную прошивку NXT от John Hansen's
Возможность загрузки нескольких программ nxtOSEK в NXT, но программа не должна быть более 64Kbytes и потреблять не более 64Kbytes RAM (наиболее простой путь, плюс есть возможность использовать стандартный набор для программирования)
2.Используя NXT BIOS (максимальный объем программы 224Kbytes). Этот метод служит для «тяжелых» проектов.
3.Прямая запись в RAM (максимальный объем программы 64Kbytes). Данный метод не рекомендуем и оставлен лишь в целях обратной совместимости.
Большое количество примеров.
lejos-osek.sourceforge.net

Для работы в MATLAB нам понадобится
Собственно сам MATLAB желательно как минимум версии 7.4
ВНИМАНИЕ MATLAB должен быть установлен в папку без любых UNICODE символов и пробелов в пути.
Embedded Coder Robot NXT, советую для новичков брать www.mathworks.com/matlabcentral/fileexchange/25207
Lego Mindstorms NXT версии 1 или 2

Для начала необходимо добавить поддержку NXT в MATLAB
Качаем файлы с www.mathworks.com/matlabcentral/fileexchange/25207
распаковываем в любую папку допустим c:\nxt
Запускаем в MATLAB'е download_ecrobot_tools.m соглашаемся со всеми предложениями.
Запускаем в MATLAB'е install_ecrobot_tools.m соглашаемся со всеми предложениями.
Внимание! При установке GNU ARM не устанавливаем Cygwin так как он устанавливается раньше.
Запускаем в MATLAB'е ecrobot_samples.m нам октроется список примеров. Где в простых моделях демонстрируется работа с NXT.

Рассмотрим простейшую модель из примера TestMotorOSEK.mdl она находится по адресу C:\LegoMindstorms\ECRobot\ecrobotNXT\samples (в случае стандартной установки)

В модели присутствую несколько базовых элементов
ExpFcnCalls Scheduler — так называемый шедулер, служит для задания имен функций и их тайминга(периодичности запуска), в данном примере заданы 3 функции 'Fcn_10ms', 'Fcn_100ms', 'Fcn_500ms' с соответствующими таймингами 10, 100, 500 ms.
Элемент Demux — служит для разделения сигнала (вектора) на более меньшие сигналы(векторы), в данном примере делит сигнал шедулера на 3 выходных(по количеству функций)
TestMotor_app — блок в котором собраны 3 функции управления моторами.
Кнопка nxtconfig(gsc) — кнопка начальной инициализации блока генерации кода
Кнопка nxtbuild('TestMotor_app','cgen') — кнопка запуска генерации исходного когда модели, код генерируется на языке c++ для последующей компиляции в исполняемый модуль.
Кнопка nxtbuild('TestMotor_app','build') — кнопка запуска генерации кода и последующей компиляции исполняемого модуля.
Кнопка nxtbuild('TestMotor_app','rxeflash') — кнопка запуска процесса записи исполняемого модуля в память NXT.
Остальные модули в модели служат исключительно для проверки выходных сигналов в среде MATLAB, а не на реальном железе.

Рассмотрим поближе блок TestMotor_app.
Он содержит в себе три входа и три подфункции. Шедулер подает импульсы на каждый из входов в зависимости от заданной частоты, тем самым запуская выполнение каждой из подфункций. Таким образом можно реализовать многозадачность.

Для начала думаю хватит. Извиняюсь сразу за местами кривой язык. Если кому будет интересно, то напишу продолжение.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.