Разработка робототехнических устройств может включать в себя все этапы, начиная от моделирования модели объекта управления и заканчивая внедрением этих устройств на целевые платформы. Описываемые ниже этапы применимы как при разработке мобильных, так и промышленных роботов и комплексных робототехнических систем.
Примерами объектов промышленной робототехники могут служить манипуляторы или продвинутые станки и т.п., а к мобильным роботам относятся БПЛА, колёсные и шагающие роботы и т.п., а также группы из этих роботов.
Типичный процесс разработки состоит из следующих этапов:
Благодаря инструментам компании Mathworks все перечисленные этапы можно выполнять в единой среде, что является немаловажным аспектом, особенно когда разработку ведёт группа инженеров. Правильная организация командной работы может оказаться залогом успешного выполнения проекта.
Перед построением модели следует понимать, во-первых, что нужно от модели, а во-вторых, чем в модели можно пренебречь. Построение модели в общем случае начинается с условного разделения объекта на части, после чего каждая из этих частей моделируется. В модель может входить практически вся информация о нём: описание структуры, алгоритм управления, тестовые сценарии и всё прочее, что необходимо для разработки.
Для любого типа модели в среде MATLAB&Simulink можно найти подходящий инструмент. Например, имеется возможность создавать модели физических систем, содержащих компоненты из различных инженерных сфер деятельности: механических, электрических, гидравлических и других.
Для уточнения параметров модели можно использовать экспериментальные данные c реального оборудования в независимости от того, находится ли оно рядом или далеко/недоступно в данный момент.
Для некоторых задач необходимо моделировать графическое 3D-окружения объекта и взаимодействовать с ним в процессе симуляции.
В зависимости от объекта управления под системой управления подразумевается сразу несколько решаемых задач.
Сначала это синтез низкоуровневой системы управления, формирующей управляющие сигналы, подаваемые на входы исполнительных устройств. Для синтеза и настройки таких систем управления существует целый спектр инструментов от компании Mathworks как для синтеза линейных систем, так и для систем, основанных на нечёткой логике, на прогнозирующих моделях, на обратной динамике, а также для робастных систем и т.п.
Далее создаётся система управления более высокого уровня, которая может включать в себя управляющую логику, планирование траектории, систему компьютерного зрения, а также алгоритмы машинного обучения, уже сейчас используемые в робототехнике.
Также зачастую необходимо обрабатывать и комплексировать данные с сенсоров. Для некоторых задач требуется обрабатывать данные с видеокамер, радаров, лидаров и т.п., которые можно напрямую подключать к среде MATLAB&Simulink.
С роботами на ROS, а также с популярными платформами, такими как Arduino и Raspbery Pi, также возможно работать из MATLAB&Simulink с помощью соответствующих тулбоксов и аддонов.
Иногда тестирование алгоритмов управления на реальном объекте управления может оказаться весьма ресурсоёмким процессом. Если объект управления находится в непосредственной доступности, то может использоваться техника быстрого прототипирования (Rapid Prototyping) на полунатурном стенде реального времени. В его основе лежит машина реального времени - компьютер, работающий в режиме жёсткого реального времени и снабжённый физическими интерфейсами для связи с оборудованием (в рассматриваемом случае на таких машинах стоит ОС Simulink Real-time). Быстрым прототипированием называется техника, при которой реальный объект подключён к машине реального времени, на котором запущен алгоритм управления. Ключевое удобство быстрого прототипирования заключается в том, что, во-первых, не нужно специально программировать машины реального времени, на них работают обычные модели Simulink c минимальными доработками, а во-вторых, можно настраивать параметры системы управления прямо в процессе работы. Это, как можно догадаться, значительно ускоряет процесс тестирования на реальном железе. Поэтому такое прототипирование и называется быстрым.
В случае если машина реального времени отсутствует, имеется возможность сымитировать реальное время на рабочем компьютере с помощью Simulink Desktop Real-time, однако её вычислительные мощности сильно ограничены.
Когда готов алгоритм управления, наступает время его реализации на целевой платформе. Для этого следует подготовить модель Simulink для развёртывания и перенести алгоритм из модели на язык программирования. В Simulink можно автоматически генерировать код на C/C++ для микроконтроллеров, на VHDL и Verilog для ПЛИС, на ST и LD для ПЛК и на CUDA-C для GPU. Генерация осуществляется под конкретную целевую платформу: для неё должен быть соответствующий пакет поддержки. На сегодняшний день поддерживается большинство популярных платформ, как зарубежных, так и отечественных. Однако даже если под конкретную платформу такого пакета поддержки нет, его можно создать.
Также из Simulink можно автоматически генерировать ноды для ROS.
Однако сгенерированный код ещё надо проверить. Для проверки работы кода на компьютере разработчика используется режим SIL (Software in Loop), а для проверки работы кода на целевой платформе используется режим PIL (Processor in Loop).
Когда развёртывание алгоритма управления на вычислителе выполнено, иногда имеет смысл помимо тестирования на реальном объекте провести тестирование запрограммированного контроллера на машине реального времени. В отличие от быстрого прототипирования, на машине реального времени теперь вычисляется модель, которая управляется подключённым к ней запрограммированным ранее контроллером. В таком режиме контроллер работает в условиях, максимально приближенных к реальным. Этот режим называется программно-аппаратным моделированием или HIL (Hardware in Loop).
Такой подход позволяет предотвратить аварийную ситуацию в результате ошибок управления, позволяет сымитировать ситуацию, которая может быть опасна для реального объекта управления, и в конце концов позволяет провести испытания системы управления для ещё не созданного или недоступного объекта.