Программирование Arduino с помощью MATLAB&Simulink
- Войдите на сайт для отправки комментариев
Simulink это среда разработки цифровых систем с помощью моделирования. Из широкой библиотеки блоков (математика, логика, обработка сигналов, видеообработка и т.д.) собираются схемы с возможностью запуска во времени. Я когда был в Штатах, узнал, что многие университеты обучают студентов программировать именно Arduino (как доступное и простое оборудование). Так вот обучают программированию они именно используя Simulink с помощью генератора С кода, заточенного по широкий список процессоров - Embedded Coder. Естественно заинтересовало и после раскопок удалось выявить следущее:
У себя на сайте MathWorks посвятило программированию целую страничку http://www.mathworks.com/academia/arduino-software/arduino-simulink.html. Выглядит это следующим образом:
1) Создаем в Simulink алгоритм, который хотим запустить на процессоре
2) Устанавливаем специальную библиотеку (процедура установки автоматизирована) для связи с устройством: http://www.mathworks.com/matlabcentral/fileexchange/30277. Эта библиотека содержит в себе блоки для связи с портами отладочной платы (и примеры):
* Digital Input
* Digital Output
* Analog Input
* Analog Output
* Serial Read
* Serial Write
3) Снимаем необходимые сигналы с помощью блоков Input, обрабатываем с помощью библиотек Simulink и выдаем результаты на подключенное оборудование с помощью Output.
4) Запускаем автоматическую генерацию кода и ждем заливки прошивки на плату (через Arduino IDE 0018 и выше).
Получается очень удобно, т.к. программировать уметь не нужно (нужно всего лишь настроить сам генератор кода под конкретный процессор), связь с перифирией заложена в вышеуказанные блоки, а логика обработки собирается из интуитивно понятных блоков (!!!!! и может быть проверена до создания/написания кода, т.е. промоделирована). Поддерживается среда Stateflow для разработки конечных автоматов и машин состояний.
Еще один интересный момент. Поддерживается технология PIL (processot-in-the-loop), когда вся схема запускается в Simulink в режиме моделирования, а некоторая ее часть (та, что предназаначена для реализации на цифре) крутится на отладке. Результаты работы поступают обратно в Simulink для визуализации.
Опробовали систему :) Сделали простенькую видео следящую систему: камера на моторчике, мотор управляется с Arduino, видео обрабатывается в Simulink. Камера отслеживает зеленый мячик, катающийся по столу.
Итого: было бы здорово, если бы наши ВУЗы смогли бы готовить студентов (по системам управления, например) с таким подходом. По крайней мере так делают за бугром.
Это, кстати, очень интересная тема. Только надо Simulink знать. Я в свое время поставил поковырял (без умных книг) ничего особенно не понял и забросил. Правда и надобности особой не было. Хотя это было давно лет 5 назад, с тех пор может он стал попонятнее.
По Simulink есть онлайн курсы (бесплатные). Только регистрация нужна.
http://www.mathworks.com/academia/student_center/tutorials/slregister.html
А так огромное количество видео семинаров как работать со средой в открытом доступе. Даже ютуб каналы есть, в том числе и на русском.
на огороде разбить огород и внем еще один огород (Среда ардуино предельна просто и достаточна ) Вы симулировать эмулировать будите два дня а код написать минуту
на огороде разбить огород и внем еще один огород (Среда ардуино предельна просто и достаточна ) Вы симулировать эмулировать будите два дня а код написать минуту
Уважаемый пользователь kikia99,
1. Ваша позиция напоминает позицию кодера, который уверен, что без предварительной проверки нужно все запрограммировать, а потом разбираться где и какие ошибки были допущены. Мое мнение - позиция антипроектная. Раньше тоже все копали котлованы лопатами (даже с модифицированными черенками и улучшенной формой штыка), но сейчас есть различного рода техника, которая помогает поводить раскопки с гораздо большей эффективностью. Я попробую конструктивно ответить.
Попробуйте представить хотя бы на пару минут, что у Вас есть возможность все проверить до реализации на железе.
Вопрос о написании кода за минуту. Вот есть сервопривод с нагрузкой. Нужно управлять им с определенным качеством (время регулирования). Управлять будет ПИД регулятор (один из самых простых алгоритмов). Задача - настроить ПИД для этого сервопривода. Как решить эту задачу за минуту я не представляю.
Управление сервоприводами шикарно ложиться на Arduino. Разработка подразумевает, что у нас есть специалист в предметной области, а не кодер.
Решение, которое видится мне:
1) Подаем тестовые воздействия на сервопривод через Arduino для последующей идентификации. Решаем задачу идентификации - получаем модель привода.
2) Получив модель сервопривода, отлаживаем алгоритм управления. Один из десятков (ПИД, нечеткая логика, нейросеть, регулятор с моделью предсказания, частотный синтез закона управления, линейно квадратичная оптимизация и т.д.). Не пишем на С. Работаем с простыми блоками.
3) Переводим алгоритм управления в дискретный вид.
4) Переносим алгоритм на Arduino.
5) Проверяем управление моделью сервопривода в режиме PIL, а затем настоящим сервоприводом.
Вот такой вот огород.
долго читал столько букв ))))) а можно пример как Вам помогла эта среда только конкретно без воды на уши ?
Экспортировал модель в html странички - можно смотреть простым браузером.
Положил модель в архив http://db.tt/Bt5crCW. Этот архив запаролен, пароль вышлю на почту (не готов совсем уж в открытый доступ работу выкидывать). За паролем обращайтесь сюда denis.zhegalin на softline точка ру
Для прсомотра этих страничек, необходимо установить плагин для IE от Adobe: http://www.adobe.com/svg/viewer/install/
Распаковываете архив и запускаете ярлык, либо файл index.html в IE. Откроется модель. Эта система следит за мячиком катающимся по столу. Камера висит на движке. Алгоритм управления двигателем крутится на Arduino (подсистема motor hardware, сам алгоритм управления скрыт, видно только блоки связи с платой (эмуляция компорта) PWM выдает управляющее воздействие, и получаем аналоговую обратную связь о текщем положении привода). Алгоритм распознавания образа зеленого мячика обсчитывается на PC в Simulink (подсистема BallTrack). Подсистема Supervisory Control решает есть ли необходимость поворачивать камеру за мячом или нет (реализовано с помощью конечных автоматов). Самый первый блок в модели считывает информацию непосредственно с камеры, т.е. видео сигнал.
какой com то там деятель, ястно все с тобой туфтолог
на тебе твой секретный алгоритм кто делает тому скрывать то нечего http://robocraft.ru/blog/arduino/477.html
(COM17 PWM выдает управляющее воздействие, и с того же COM17 получаем аналоговую обратную связь о текщем положении привода) ТАКОЕ ЕЩЕ ПРИДУМАТЬ НУЖНО ТЫ РЕАЛЬНО ТАЛАНТ
Очень интересно, а мне можно пароль на почту pochta{на}arduino точка ru.
Давайте будем более ласковы друг другу!
какой com то там деятель, ястно все с тобой туфтолог
на тебе твой секретный алгоритм кто делает тому скрывать то нечего http://robocraft.ru/blog/arduino/477.html
(COM17 PWM выдает управляющее воздействие, и с того же COM17 получаем аналоговую обратную связь о текщем положении привода) ТАКОЕ ЕЩЕ ПРИДУМАТЬ НУЖНО ТЫ РЕАЛЬНО ТАЛАНТ
Последний раз отвечаю на оскорбления в свой адрес. Надеюсь администрация форума, примет соответствующие меры.
Плата подключена по USB к PC. Необходимо указать порт, на котором висит плата. Этот порт в моем случае 17. Не думал, что это так сложно понять.
Пора остановится! Каждому своё! с уважением Adessit
Экспортировал модель в html странички - можно смотреть простым браузером.
Положил модель в архив http://db.tt/Bt5crCW. Этот архив запаролен, пароль вышлю на почту (не готов совсем уж в открытый доступ работу выкидывать). За паролем обращайтесь сюда denis.zhegalin на softline точка ру
Для прсомотра этих страничек, необходимо установить плагин для IE от Adobe: http://www.adobe.com/svg/viewer/install/
Распаковываете архив и запускаете ярлык, либо файл index.html в IE. Откроется модель. Эта система следит за мячиком катающимся по столу. Камера висит на движке. Алгоритм управления двигателем крутится на Arduino (подсистема motor hardware, сам алгоритм управления скрыт, видно только блоки связи с платой (эмуляция компорта) PWM выдает управляющее воздействие, и получаем аналоговую обратную связь о текщем положении привода). Алгоритм распознавания образа зеленого мячика обсчитывается на PC в Simulink (подсистема BallTrack). Подсистема Supervisory Control решает есть ли необходимость поворачивать камеру за мячом или нет (реализовано с помощью конечных автоматов). Самый первый блок в модели считывает информацию непосредственно с камеры, т.е. видео сигнал.
С разрешения Denis.Zhegalin выкладываю немного иформации об этом проекте на связке Arduino+MATLAB&Simulink:
Оборудование:
Все собрано наглядно в прозрачном пластиковом корпусе. На фотографии я так понял нету камеры только.
красиво) Хорошо иметь доступ к резаку акрила...
Очень интересная тема !!!
Если вас не затруднит напишите как устанавливать блоки для ARduino в Матлабе ,Я новичек в матлабе и несколько запутался!!!
http://www.mathworks.com/academia/arduino-software/ - это офф ресурс, повященный Arduino&MATLAB
Список необходимого софта для программирования Arduino: http://www.mathworks.com/academia/arduino-software/arduino-simulink.html, триал можно запросить на sl-matlab.ru
Вот это основной пакет с библиотекой блоков, размещенный на сообществе пользователей:
http://www.mathworks.com/matlabcentral/fileexchange/30277
И, далее, внутри пааки в корне лежит readme.txt. Инструкция по шагам расписана.
Тема заглохла или есть живые? Кто-то сейчас занимается связкой матлаб+ардуино?
Мне очень нравятся математические возможности матлаба, но смущает, что родная библиотека под сам матлаб работает только через USB. А хочется мобильности! Кто-то использовал xbee, wifi или bluetooth для связи с компом? Вроде это возможно, но не пойму будет ли связь с ардуино выполняться в том же формате и качестве или надо подключаться через стандартные команды серийного порта?
Симулинк вроде как заливает программу и дальше связь не нужна. В эту сторону еще не копал...
При подключении к Матлабу проблем нет. При подключении к Симулинку выдается ошибка.
>> arduino.Prefs.setBoard('uno')
??? Reference to non-existent element of a cell array.
Error in ==> Prefs>Prefs.parseBoardsFile at 227
lhs = parsedLines{i}{1}{1}; % can be of the
form xx.yy.zz
Error in ==> Prefs>Prefs.setBoard at 66
boards = arduino.Prefs.parseBoardsFile(boardsFile);
Здесь сказано http://www.mathworks.com/matlabcentral/fileexchange/authors/234855, что можно игнорировать ошибку, но затем в модели указать тип. Как это делается?
Хороший вопрос, но я с симулинком там и не поработал. Я где то в свое время нашел такой документ SIMULINK working_with_arduino_hardware и успешно руководствовался им при подключении меги в симулинке. А что за проект если не секрет?
Кстати радио-модуль APC220 для связи с ардуиной попробовал. Работает зараза! :)
Удалено модератором
Наверное надо поискать еще лучше. Не в обиду будет сказано потому как тема Матлаба это одно, а программаторы это другое.
Программаторы.......хорошо спасибо там спрошу!
Возникла проблема с mega2560 и simulink (r2012a), а именно, подавая на вход +5, я не вижу этого сигнала в осциллографе. Показывает 0. При этом я вижу изменения входа в матлабе. А вот в симулинке - нет. Выхода отрабатывают правильно: пишу единицу в них - единица появляется. А вот как смотреть данных с входов?
Кстати радио-модуль APC220 для связи с ардуиной попробовал. Работает зараза!
Через IDE настроил его, а вот с SIMULINK не могу подружить. Реализую проект управления импеллерной авиамоделью с симулинка (пакет Arduino IO). По проводам уже результат есть. Бьюсь теперь с APC220.
Если кому интересно предлагаю сотрудничество по проектам SIMULINK+Arduino. Как специалист по системам управления полетом поддерживаю denis.zhegalin. подтверждаю что тема реальная, если ее развить. За небольшую стоимость плат(китайских аналогов) возможно создание различных программно-аппаратных устройств различного назначения вполне приличного уровня.
Конечно, интересно. Давайте развивать. У меня идет тяжеловато - дискретные сигналы получить на осциллографе удалось, но они появляются с задержкой.
Товарищи, все это очень интересно, только времени не хватает.
Отписывайтесь пожалуйста о ваших успехах.
Я тоже пробовал APC220, но у меня была связка с самим матлабом. Действительно зараза работала. Глубокого анализа не проводил, но когда комп и ардуина стояли рядом, задержка была незначительная.
та же проблема (с временем). Подскажите какие выставляли настройки APC220? какую библиотеку использовали для связки matlab+arduino?
Я использую Arduino IO package . Matlab R2010b. Плата DFRuino Romeo All-in-one. Реализовал управление 10 сервами на модели импеллерного самолета. Осталось разобраться с моторами импеллеров и выпуском шасси. Проект необходим для демонстрации возможности различных алгоритмов автоматического управления полетом. То есть система управления - в блоках simulink, датчики и исполнительные механизмы на борту авиамодели.
Проблемы: 1) Камень преткновения - управление по воздуху. Дело в том что APC 220 по сути эмулирует com-порт. MATLAB его видит, пингует, но связь не проходит. Через IDE-интерфейс вроде простейшие пакеты по нему передаются и принимаются. а матлаб не инициализирует com.
2) сервы шумят. вроде питание на них отдельно подаю требуемое...лишка по напряжению боюсь подать.
по поводу задержки - в simulinke ставлю в настройках моделирования: Fixed step, метод вычисления ode1 (Euler), шаг дискретизации 0.02 (то есть 50 Гц). Этот же шаг должен стоять во всех дискретных блоках модели, а также на блоках передачи сигналов в ардуино. На эти блоки сигнал должен приходить дискретный!!!!!! Даже если вся модель состоит из блоков для непрерывных систем перед передачей сигнала на плату необходимо обработать его (например простейшим Zero-Order Hold, естественно с тем же шагом дискретизации). Здесь же сигналы корректируются по амплитуде, знаку, для того чтобы серва отрабатывала нужным образом. вводится необходимая фильтрация и т.д.
Вот простым языком примерно так.
Чуть не забыл. Имеется возможность менять скорость моделирования если это необходимо (например блок Real-nime pacer). Если здесь поставить (1), то моделирование будет приближено к реальному времени, то есть передача сигнала на плату будет соответствовать реально-протекающему времени в модели, соответственно можно его увеличивать и уменьшать. либо убрать ограничение (inf). Однако все упирается в быстродействие компьютера. Если имеются сложные вычисления и большое число каналов передачи данных возможны задержки. Если есть необходимость могу рассказать подробнее.
Чуть не забыл. Имеется возможность менять скорость моделирования если это необходимо (например блок Real-nime pacer).
Такого блока не нашел. Есть Real-time Synchronization.
по поводу задержки - в simulinke ставлю в настройках моделирования: Fixed step, метод вычисления ode1 (Euler), шаг дискретизации 0.02 (то есть 50 Гц). Этот же шаг должен стоять во всех дискретных блоках модели, а также на блоках передачи сигналов в ардуино. На эти блоки сигнал должен приходить дискретный!!!!!!
Шаг ставить только в моделях или еще и во вкладке Solver? Второй вариант у меня выкидывает ошибку. Поставил auto (а в блоках 0,02), то все работает, но с той же задержкой.
Такого блока не нашел. Есть Real-time Synchronization.
Пардон, Real-time pacer конечно. Это блок из библиотеки Arduino IO Library.
Шаг ставить только в моделях или еще и во вкладке Solver? Второй вариант у меня выкидывает ошибку. Поставил auto (а в блоках 0,02), то все работает, но с той же задержкой.
Лучше везде ставить одинаковое значение. Ошибка скорее всего из-за того что где-то (в каком-то дисретном блоке) значение отличается. auto во вкладке solver нежелательно ставить, так как конечная задача моделирования - получить дискретный сигнал с фиксированной частотой и передать его на arduino.
Такого блока не нашел. Есть Real-time Synchronization.
Пардон, Real-time pacer конечно. Это блок из библиотеки Arduino IO Library.
Вот такая ошибка вылезает: The corresponding 'msfun_realtime_pacer.tlc' file for the MATLAB S-function 'msfun_realtime_pacer' in block 'work_version/Real-Time Pacer1' must be located in the current working directory, the MATLAB S-function directory 'C:\ArduinoIO\examples', or the directory 'C:\ArduinoIO\examples\tlc_c'
А где взять этот файл msfun_realtime_pacer.tlc?
Подаю 1 на вход. Задержки нет, а вот когда снимаю сигнал, задержка появляется.
denilson
Очень похоже что вы пути к папке ArduinoIO не прописали. Выполните все действия по установке которые в readme-файле прописаны (запуск install_arduino.m). Ну или на крайний случай вручную ЛКМ на папке ArduinoIO, Add to path - selected folders and subfolders. файл msfun_realtime_pacer.tlc находится в папке C:\ArduinoIO\simulink.
очень интересная тема! А, может кто-либо пошагово (с сылками) хотябы начать двигать остальных?
Например, для начала ткнуть ссылкой на нужный Симулинк, описать как настроить под Ардуину. Где взять нужные библиотеки и как из прикрутить
очень интересная тема! А, может кто-либо пошагово (с сылками) хотябы начать двигать остальных?
Например, для начала ткнуть ссылкой на нужный Симулинк, описать как настроить под Ардуину. Где взять нужные библиотеки и как из прикрутить
Иди на сайт матлаба, там все черным по белому рассписано. Есть библиотеки для матлаба и симулинка. Дано описание по установке.
Похоже, дело не в этом. Как я понял, ArduinoIO заточена по Uno, а у меня Mega. Установку ArduinoIO сделал так же, как в readme. Какая плата у вас?
У меня тоже мега. Порой зависал обмен данными и сериал порт переставал отвечать. Помогала перезагрузка. А в остальном все было нормально.