СОДЕРЖАНИЕ
Введение……………………………………………………………………. 5
1. Робототехнический комлекс LEGO MINDSTORMS ……………….. 7
1.1 Обзор сред программирования для LEGO MINDSTORMS NXT....... 9
1.2 Использование пакета EMBEDDED CODER ROBOT NXT для
графического моделирования и генерации кода на платформе
nxtOSEK…………………………………………………………………………. 11
1.2.1 Установка и основы работы с пакетом ECRobot…………………. 12
1.2.2 Функционирование пакета ECRobot……………………………….. 15
1.2.3 Основные блоки ECRobot NXT……………………………………. 17 1.3 Моделирование и программирование робототехнических комплексов на основе набора LEGO MINDSTORMS……………………………………. 26 1.3.1 Модель одноколейного двухколесного робота «Мотобот»……. 30 1.3.1.1 Математическая модель робота «Мотобот»…………………… 1.3.1.2 Нахождение параметров линеаризованной модели движения робота…………………………………………………………………………… 1.3.1.3 Расчет параметров регулятора…………………………………. 1.3.1.4 Физические параметры модели…………………………………. 1.3.1.5 Описание программы Motobot’а……………………………….. 1.3.1.6 Результаты эксперимента………………………………………… 1.3.2 Модель робота «Segway»………………………………………….. 1.3.2.1Расчет математической модели………………………………….. 1.3.2.2 Расчет регулятора………………………………………………… 1.3.2.3 Управление сервоприводами……………………………………. 1.3.2.4 Физические параметры модели…………………………………. 1.3.2.5 Описание программы Segway…………………………………… 1.3.2.6 Результаты моделирования……………………………………… 1.3.3 Модель робота «Болбот»………………………………………….. 1.3.3.1 Расчет математической модели………………………………….. 1.3.3.2 Расчет регуляторов………………………………………………. 1.3.3.3 Физические параметры модели…………………………………. 1.3.3.4 Описание программы Ballbot………………………………….. 1.3.3.5 Результаты моделирования……………………………………… 2 Робототехнический комлекс BIOLOID PREMIUM KIT…………….. 2.1 Возможности сервоприводов Dynamixel…………………………… 2.1.1 Система управления сервоприводами Dynamixel……………….. 2.1.2 Технические характеристики серводвигателей Dynamixel………. 2.2 Обзор программного обеспечения………………………………….. 2.3 Программирование робототехнического комплекса BIOLOID на языке С………………………………………………………………………….. 2.3.1 Карта портов микроконтроллера CM-510……………………….. 2.3.2 Таблица управления сервоприводами Dynamixel………………. 2.3.3 Управление портами………………………………………………. 2.3.4 Получение входного сигнала с кнопки…………………………… 2.3.5 Последовательная передача данных………………………………. 2.3.6 Управление динамиком…………………………………………….. 2.3.7 Работа с микрофоном………………………………………………. 2.3.8 Работа с инфракрасным сенсором………………………………… 2.3.9 Управление сервоприводом Dynamixel…………………………… 2.3.10 Синхронное управление двигателями…………………………… 2.3.11 Удаленное управление посредством Zigbee передатчика………. 2.3.12 Пример организации ходьбы гуманоидного робота Bioloid по номинальной траектории…………………………………………………….. Литература….…………………………………………………………… Приложение….……………………………………………………………
ВВЕДЕНИЕ
Роботы сегодня входят в нашу жизнь в различных областях. Они летают в космос, исследуют другие планеты; помогают в военных целях – разминируют бомбы и разведывают обстановку с воздуха. В промышленности многие отрасли уже немыслимы без роботов: они собирают автомобили, помогают находить новые лекарства. Многие устройства, принимающие решения на основе полученных от сенсоров данных, тоже можно считать роботами, например, лифты, стиральные машины, системы антиблокировочного торможения, помогающие избежать аварий. Робот может управляться оператором, либо работать по заранее составленной программе. Использование роботов позволяет облегчить или вовсе заменить человеческий труд на производстве, в строительстве, при рутинной работе, при работе с тяжёлыми грузами, вредными материалами, а также в других тяжёлых или небезопасных для человека условиях [2-3, 5].Современные подходы должны делать процесс обучения наглядным, а сам предмет увлекательным. Последние технологические достижения позволяют поднять обучение в области теории управления на качественно новый уровень. Среди них, в первую очередь, можно выделить мехатронные и робототехнические комплексы. В лабораторных работах студентов подобные комплексы могут послужить отличной заменой традиционному компьютерному моделированию [1, 3, 4, 7].
С образовательной точки зрения, данный подход обладает рядом преимуществ. Так, используя такое лабораторное оборудование, студенты имеют возможность понять основные принципы теории управления и оценить на практике результаты своих расчетов. Также студенты могут получить дополнительные знания в других областях, таких как теория информации, программирование, схемотехника и других. Таким образом, используя мехатронные и робототехнические лабораторные комплексы, мы можем предоставить студентам возможность создавать систему управления для устройства, начиная с расчета формул и заканчивая экспериментальной апробацией без риска повредить дорогое оборудование.
На данный момент создано множество мехатронных и робототехнических комплексов, которые повсеместно используются в образовательном процессе: VexRobotis, Mechatronics Control Kit, FestoDidactic, LEGO Mindstorms, OLLO, fischertechnik, Bioloid и др. Среди указанного разнообразия целесообразно выделить два наиболее популярных ввиду своей доступности, модульности и гибкости платформ: LEGO Mindstorms и Bioloid.
Данный выбор подтверждается множеством научных статей, посвященных как использованию данных наборов в образовательных целях, так и научным изысканиям на тему составления математических моделей, синтеза закона управления той или иной модели робота и т.д. Так, например, существует множество работ, посвященных устойчивости гуманоидного робота Bioloid, стоящего на одной ноге, и управлению мультиагентными системами роботов Lego [19-21].
Настоящее учебное пособие ставит целью ознакомить студентов с двумя наиболее популярными в образовательной среде робототехническими наборами (Lego Mindstorms 2.0 и Bioloid Premium Kit), их ПО и способами программирования. Помимо этого, пособие содержит ряд примеров программирования моделей роботов и их законов управления с применением методов современной теории управления.
Пособие ориентировано на студентов старших курсов, обучающихся по программе бакалаврской подготовки по направлению 221000. «Мехатроника и робототехника». При изложении материала авторы исходили из того, что читатель знаком с основами программирования на языке С, электроники, цифровой техники и теории автоматического управления в рамках дисциплин «Информатика», «Общая электротехника и электроника», «Микропроцессорные устройства систем управления» и «Теория автоматического управления», изучаемые при подготовке бакалавров на более ранних курсах.
Авторы надеются, что учебное пособие будет полезно студентам других специальностей, интересующихся вопросами реализации своих идей на реальном объекте, а также специалистам.
1 РОБОТОТЕХНИЧЕСКИЙ КОМЛЕКС LEGO MINDSTORMS
LEGO Mindstorms — это конструктор (набор сопрягаемых деталей и электронных блоков) для создания программируемого робота. Впервые представлен компанией LEGO в 1998 году. Через 8 лет (2006) в свет вышла модель LEGO Mindstorms NXT, а в 2009 — LEGO Mindstorms NXT 2.0.Комплектация набора LEGO Mindstorms NXT 2.0:
программируемый контроллер NXT с четырьмя входными и тремя выходными портами (рисунок 1.1).
Рисунок 1.1 – Программируемый контроллер NXT компании LEGO 4 сенсора (рисунки 1.2 – 1.4):
Ультразвуковой сенсор — позволяет роботу измерять расстояние до объекта и реагировать на движение;
Два сенсора нажатия – позволяют роботу реагировать на прикосновения;
Сенсор цвета включает в себя сразу три функции: умеет определять цветов (белый, черный, желтый, красный, зеленый и голубой), интенсивность освещения и быть лампой подсветки.
3 интерактивных сервомотора со встроенными энкодерами Рисунок 1.5 – Сервомотор со встроенным энкодером USB кабель для подключения контроллера к компьютеру.
7 соединительных кабелей.
Диск с программным обеспечением для Windows и Mac OS.
Тестовое поле для калибровки сенсоров.
613 различных Lego деталей (рисунок 1.6).
Рисунок 1.6 - Lego детали набора LEGO Mindstorms NXT 2. Помимо сенсоров, входящих в набор, существует множество других сенсоров как от компании LEGO, так и от сторонних производителей (HiTechnic, Mindsensors, Dexter Industries). Некоторые из них приведены на рисунке 1.6:
Рисунок 1.6 – а) Датчик-гироскоп HiTechnic NXT; б) Датчик температуры Lego 9749; в) Датчик-компас HiTechnic NXT; г) Видеосистема На базе Lego Mindstorms можно получить различные модели мобильных роботов, балансиров, маятниковых систем, в том числе и нетривиальных, и т.д. В зависимости от поставленных задач и имеющегося опыта пользователь может выбрать среди множества необходимое ПО и язык программирования.
1.1 ОБЗОР СРЕД ПРОГРАММИРОВАНИЯ ДЛЯ LEGO
MINDSTORMS NXT
Стандартное программное обеспечение LEGO MINDSTORMS NXT Software [9] и язык NXT-G приемлемы лишь на начальных этапах программирования, их ограниченные возможности не позволяют создавать сложные алгоритмы управления. В целях совершенствования представления алгоритмов управления было разработано множество различных сред и приложений для программирования NXT, многие из которых находятся в свободном доступе (таблица 1.1). В случае высоких требований к реализации проекта (многопоточность, возможности планирования заданий, обеспечения отказоустойчивости, взаимодействие с внешними устройствами в реальном времени и др.) более предпочтительным является использование объектноориентированных языков программирования.Таблица 1.1 ПО для NXT, находящееся в свободном доступе в сети Microsoft Robotics Developer Studio www.mrds.com LabVIEW Education Edition www.ni.com Кроме того, возможность интеграции с LabView и MATLAB/Simulink позволяет использовать NXT в научно-исследовательских целях, в частности, при создании алгоритмов управления техническими системами. Так, когда алгоритм управления, основанный на математической модели, отлажен в одной из инженерных сред, интеграция с платформами MATLAB/Simulink или LabView позволяет в краткие сроки провести испытания на реальном объекте, без каких-либо дополнительных усилий.
В таблице 1.2 приведены некоторые из довольного большого многообразия сред для программирования LEGO Mindstorms NXT и их основные характеристики.
Таблица 1.2 Некоторые среды программирования LEGO Mindstorms Язык Текстовый Текстовый Текстовый Графический Текстовый Графический ционная дартная дартная система точность плавающей точкой В академической среде наиболее популярны среды LEGO MINDSTORM Toolkit для LabView и Embedded Coder Robot NXT для MATLAB/Simulink.
Программа, написанная в LabView, использует стандартную прошивку LEGO. Однако LabView является компилятором своего собственного языка, что зачастую приводит к необходимости написания собственных библиотек при решении задач, требующих сложные вычисления. Для использования MATLAB необходимо произвести предварительную установку системы leJOS.
Программные продукты, основанные на языках высокого уровня и находящиеся в свободном доступе, представлены системами NXC и leJOS.
NXC (Not Exactly C) – это C-подобный язык для программирования контроллера NXT с использованием многозадачности, функционирующий в программирования IDE, также находящейся в свободном доступе, можно создавать сложные алгоритмы управления в реальном времени, включающие расширенный обмен данными и управление файлами.
LeJOS является аналогом операционной системы для контроллера NXT распределением потоков, массивами, рекурсиями и т.д.
1.2 ИСПОЛЬЗОВАНИЕ ПАКЕТА EMBEDDED CODER ROBOT
NXT ДЛЯ ГРАФИЧЕСКОГО МОДЕЛИРОВАНИЯ И ГЕНЕРАЦИИ
КОДА НА ПЛАТФОРМЕ nxtOSEK NxtOSEK (до мая 2008 года – LEJOS OSEK) является гибридом двух общедоступных платформ: leJOS NXJ и TOPPERS OSEK [11, 12]. LeJOS NXJ предоставляет возможность ANSI C/C++ программирования для NXT с использованием API-функций. Доступ к сенсорам, моторам и другим устройствам NXT реализуется напрямую, что позволяет существенноTOPPERS OSEK
многозадачности в реальном времени.Кроме программирования на языках высокого уровня nxtOSEK дает возможность использовать Embedded Coder Robot NXT (далее ECRobot) – общедоступный специализированный пакет расширения MATLAB/Simulink, среду для графического моделирования и генерации кода. Пакет позволяет создавать и быстро конвертировать готовые Simulink-модели в исполняемый роботом файл. Именно этот аспект использования nxtOSEK будет более подробно рассмотрен далее.
1.2.1 Установка и основы работы с пакетом ECRobot установить ряд необходимых программ и сменить операционную систему NXT. Далее приведен подробный процесс установки [13]:
1. Убедитесь, что на вашем компьютере MATLAB установлен в директорию, путь к которой не содержит пробелов. Например:
а. “C:\MATLAB” – Правильно б. “C:\MATLAB R2010a” – Неправильно 2. Убедитесь, что у вас установлены MATLAB (версии не ниже R2008b), Simulink, Real-Time Workshop and Real-Time Workshop Embedded Coder. Для этого в командном окне MATLAB необходимо набрать команду «ver», которая выведет информацию о версиях MATLAB и компонентов.
3. Установка Cygwin / GNU Make а. Скачайте Cygwin 1.5.x или более новую версию с веб-сайт Cygwin:
http://www.cygwin.com/ б. Установите Cygwin в “C:\cygwin” (рисунок 1.6) в. Выберите “make” в части “Devel” списка файлов.
4. Установка GNU ARM а. Скачайте GCC-4.0.2 бинарный установщик из секции FILES с вебсайта GNU ARM: http://www.gnuarm.com/ б. Запустите установщик и установите GNU ARM в C:/cygwin/GNUARM в. Сконфигурируйте установочный диалог как показано на рисунке 1. г. Уберите галочку с пункта Install Cygwin DLLs, потому что Cygwin уже установлен (рисунок 1.8) д. В конце установки на вопрос о добавлении установочной директории Рисунок 1.7 – установщик GNU Рисунок 1.8 – установщик GNU 5. Установка драйвера NXT USB:
а. (Если стандартное программное обеспечение LEGO уже установлено на вашем компьютере пропустите этот шаг) Скачайте MINSTORMS NXT Driver v1.02 с веб-сайта обновлений http://mindstorms.lego.com/Support/Updates/ - см. Рис. 1. 6. Установка NeXTTool:
а. Скачайте NeXTTool с http://bricxcc.sourceforge.net/utilities.html и распакуйте файлы в “c:\cygwin/nexttool” 7. Установка стандартной прошивки NXT:
а. Скачайте модернизированную прошивку NXT и установите по шагам, описанным ниже: http://bricxcc.sourceforge.net/lms_arm_jch.zip (версии 1.06 или более поздней) б. Распакуйте архив в папку “C:\cygwin\nexttool” – вы должны увидеть файл с названием типа “lms_arm_nbcnxc_X”, где X=106 для версии в. Откройте командную строку – В Windows Пуск=>Выполнить=> и затем введите “cmd” и выберите ok г. Напечатайте “c:” в строке д. Напечатайте “cd cygwin\NeXTTool” в строке е. Подключите контроллер NXT к порту USB и включите его.
Для загрузки прошивки, напечатайте (не скопируйте и вставьте) команды, приведенные ниже, где “lms_arm_nbcnxc_106” имя файла, который вы загрузили на шаге b.
nexttool /COM=usb –firmware=lms_arm_nbcnxc_106.rfw 8. Установка Embedded Coder Robot NXT:
а. Скачайте и распакуйте ECROBOT NXT из http://www.mathworks.fr/matlabcentral/fileexchange/13399 в корневой каталог установочной директории MATLAB.
9. Установка nxtOSEK и запуск ecrobotnxtsetup.m:
а. Скачайте и распакуйте nxtOSEK с веб-сайта nxtOSEK( http://lejososek.sourceforge.net/download.htm?group_id=196690 ) в папку ecrobotNXT/environment (рисунок 1.10).
Рисунок 1.10 – nxtOSEK в папке ecrobotNXT/environment б. Зайдите в папку и запустите m-файл ecrobotmxtsetup.m показанный на рисунке 1.11. Далее выполнится оставшийся процесс установки.
1.2.2 Функционирование пакета ECRobot При создании модели в дополнение к стандартным средствам MATLAB/Simulink используются блоки ECRobot NXT Blockset, которые появятся в Simulink Library Browser после установки ECRobot. Блоки представляют интерфейс взаимодействия контроллера NXT с внешними устройствами (моторами, датчиками, Bluetooth-устройствами и т.д.), процесс управления и обмена информацией. Подробное описание блоков приведено в разделе 1.2.3 «Основные блоки ECRobot NXT»
После того, как окончательная модель сформирована и отлажена, запускается генерация С-кода. Эту функцию выполняет пакет расширения MATLAB Real-Time Workshop Embedded Coder совместно с Real-Time Workshop.
Далее необходимо скомпилировать готовый код на С в исполняемый процессором файл с расширением «.rxe». Для этого служит приложениекомпилятор GNU ARM toolchain 4.0.2. Для корректной работы приложения необходим Cygwin (версии не ниже 1.5) – Linux-подобная среда для Windows, которая позволяет запускать некоторые Linux-приложения под управлением Windows. Cygwin содержит GCC (GNU Compiler Collection), обеспечивая поддержку функционирования главного процессора NXT.
Последний шаг – загрузка полученного файла в NXT. Для этого используется NeXTTool – консольное приложение, позволяющее загружать с компьютера на борт NXT исполняемые файлы (с расширением «.rxe») и операционные системы (с расширением «.rfw»). Для корректной работы NeXTTool необходим LEGO Mindstorms NXT Driver – драйвер для связи Windows с NXT через USB-кабель. Однако загружаемая таким образом программа не должна превышать по объему 64 кБ. Для загрузки более «тяжелых» проектов служит NXT BIOS (максимальный объем 224 кБ).
Для прохождения всех этапов от генерации С-кода до загрузки исполняемого файла на NXT пользователю необходимо нажать всего на две кнопки (рисунок 1.12). Кнопка «Generate code and built the generated code» кнопка запуска генерации исходного кода модели на языке С и последующей компиляции в исполняемый модуль. В итоге в каталоге «nxtprj» текущей директории появятся файл с расширением.с с инициализацией функций программы появится файл с расширением.rxe, который может быть напрямую загружен в NXT, а в каталоге «***_app_ert_rtw» (где *** название проекта) появится файл «***_app.c» с кодом, отражающим функционирование будущего исполняемого модуля. Кнопка «Download (NXT enhanced firmware)» - кнопка запуска процесса записи исполняемого модуля в память блока NXT (предварительно необходимо установить соединение по USB-кабелю). После этого файл может быть запущен на NXT.
При этом в командном окне MATLAB будут появляться служебные сообщения о результатах завершения каждого из этапов.
Рисунок 1.12 – Кнопки в Simulink-модели для генерации, компиляции и Для работы загруженного файла необходимо, чтобы на NXT была установлена операционная система nxtOSEK, которая позволяет NXT наряду с обычными LEGO MINDSTORMS NXT Sofware программами выполнять двоичные файлы, скомпилированные из С кода («.rxe»-приложения).
Таким образом, nxtOSEK программы выполняют в машинном коде главным процессором NXT, что обеспечивает быстрое исполнение при малом потреблении оперативной памяти (сама nxtOSEK потребляет около кБ).
Одной из ключевых особенностей использования nxtOSEK совместно с ECRobot является автономность робота. Благодаря этому становится возможным создание распределенных систем управления группой роботов, основанных на принципах децентрализованного принятия решений о действиях каждого робота группы.
1.2.3 Основные блоки ECRobot NXT Если ECRobot NXT был установлен успешно, то набор блоков ECRobot NXT появится в браузере библиотек Simulink (рисунок 1.13).
Рисунок 1.13 - Набор блоков ECRobot в браузере библиотек Simulink Детально рассмотрим основные блоки, используемые в ECRobot NXT.
Revolution Sensor блоки:
Блоки Revolution Sensor используются для измерения изменения положения сервопривода. Блок Revolution Sensor Interface - это блок, считывающий данные с модели контроллера NXT и передающий их на сервопривод. Блок Revolution Sensor Read используется для получения данных с сервопривода. В режиме симуляции эти блоки не используются;
обычно они используются для включения API предполагаемого устройства в генерируемый код (при моделировании они выполняют функцию сигнальных блоков In\Out).
Диапазон данных Диапазон int32 [град] Servo Motor блоки:
Блоки Servo Motor используются для управления сервоприводами. Servo Motor состоит из двух блоков. Блок Servo Motor Interface считывает данные с модели контроллера NXT и передает их на сервопривод. Блок Servo Motor Write используется для задания параметров вращения серводвигателей. При моделировании они выполняют функцию сигнальных блоков In\Out.
Battery Voltage блоки:
Блоки Battery Voltage используются для определения заряда аккумулятора NXT. Блок Battery Voltage Interface это блок, для вывода данных с модели контроллера NXT. Блок Battery Voltage Read используется для считывания данных об уровне заряда аккумулятора.
Диапазон данных 0 до возможного максимального значения напряжения System Clock блоки:
Блоки System Clock используются для чтения данных системных часов NXT. Блок System Clock Interface не имеет вход/выход, однако он доставляет значения блоку чтения при моделировании. Как правило, поддержку системных часов во время симуляции обеспечивает блок System Clock Read.
Блок System Clock Read используется для получения данных с системных часов. В реальном NXT системные часы начинают работать с 0 в момент включения устройства.
Диапазон данных от 0 до максимально возможного значения uint32 в Sound Volume Tone блоки:
Блоки Sound Volume Tone используются для генерации звука, который определяется громкостью, частотой и длительностью.
Тип данных Частота: uint32, длительность: uint Диапазон данных Частота: от 31 [Гц] до 14080 [Гц] Ultrasonic Sensor блоки:
Блоки Ultrasonic Sensor используются для измерения дистанции до препятствий или бесконтактного определения самих препятствий. Ultrasonic Sensor Interface – выходной блок интерфейса контроллера NXT. Ultrasonic Sensor Read используется для получения данных с ультразвукового датчика расстояния.
Диапазон данных от 0 до 255 [см], -1 (датчик не готов для измерений) Light Sensor блоки:
Блоки Light Sensor используются для измерения яркости света, попадающего на диод датчика. Чем больше измеряемое значение, тем темнее поверхность (или меньше отражение). Датчик света состоит из двух блоков.
Light Sensor Interface – выходной блок интерфейса контроллера NXT. Light Sensor Read используется для получения данных с датчика света.
Диапазон данных от 0 до Sound Sensor блоки:
Блоки Sound Sensor используются для измерения громкости звука. Чем меньше значение, тем громче звук. Sound Sensor Interface – выходной блок интерфейса контроллера NXT. Sound Sensor Read используется для получения данных с датчика звука.
Диапазон данных от 0 до Touch Sensor блоки:
Блоки Touch Sensor используются для обнаружения контакта с препятствием. Если датчик имеет контакт с препятствием, датчик возвращает 1. Touch Sensor Interface – выходной блок интерфейса контроллера NXT.
Touch Sensor Read используется для получения данных с датчика касания.
Диапазон данных 0 (нет касания), 1 (есть касание) Bluetooth Rx блоки:
Блоки Bluetooth Rx представляют беспроводной протокол Bluetooth для получения Bluetooth-пакетов. Процесс получения пакетов представлен двумя блоками. Bluetooth Rx Interface – интерфейсный блок получения пакетов для взаимодействия с контроллером NXT. Bluetooth Rx Read используется для получения данных. Блоки Bluetooth Rx позволяют использовать только однонаправленную связь с моделью (прием данных), а также только соединение ПК-NXT (не поддерживают NXT-NXT).
Диапазон данных от 0 до Bluetooth Tx блоки:
Блоки Bluetooth Tx представляют беспроводной протокол Bluetooth для отправки Bluetooth-пакетов. Процесс отправки пакетов представлен двумя блоками. Bluetooth Tx Interface – блок интерфейса, для взаимодействия с контроллером NXT. Bluetooth Tx Write используется для передачи данных.
Блоки Bluetooth Tx позволяют использовать только однонаправленную связь с моделью (передача данных) и поддерживают соединение ПК-NXT и NXTNXT.
Диапазон данных от 0 до NXT GamePad Data Logger блок:
NxtOSEK содержит утилиту, которая называется NXT GamePad. Эта утилита позволяет пользователю удаленно управлять NXT, который содержит nxtOSEK через Bluetooth, используя при этом аналоговый контроллер (джойстик). Начиная с версии 1.01 пользователю также предоставлены возможности выбора функций управления с помощью джойстика “Analog Stick Control” и сбора данных с устройства “NXT Data Acquisition”, в зависимости от целей. Даже если у пользователя нет аналогового игрового контроллера, NXT GamePad можно использовать только для получения данных о работе устройства за время использования [15].
Для передачи данных на ПК необходимо запустить приложение NXTGamePad.exe и установить значение COM-порта в соответствии с установленным соединением. Входы Data1 и Data2 можно использовать для получения данных с Analog GamePad. Полученные данные могут быть сохранены в CSV файл и это может быть полезно для анализа работы приложения NXT в MATLAB. NXT GamePad Data Logger не должен использоваться вместе с блоком Bluetooth Tx Write в модели.
Таблица 1.13 Характеристики блока NXT GamePad Data Logger Диапазон данных от -128 до NXT GamePad ADC Data Logger блок:
Рисунок 1.27 - Блок NXT GamePad ADC Data Logger NXT GamePad ADC Data Logger имеет такой же функционал как NXT GamePad Data Logger, но пользователь может сконфигурировать 4 сигнала для получения и записи данных. NXT GamePad ADC Data Logger не должен использоваться с блоками Bluetooth Tx Write в модели.
Таблица 1.11 Характеристики блока NXT GamePad ADC Data Logger Название входа Тип данных Диапазон данных Размерность ADC1/ADC2/ADC3/ADC4 Int Gyro Sensor блоки:
Блоки Gyro Sensor (гироскоп) используются для считывания значений с гироскопа, представляющих изменение угловых градусов в секунду. Gyro Sensor Interface - блок интерфейса для модели контроллера NXT. Блок Gyro Sensor Read используется для получения данных с гироскопа.
Диапазон данных от 0 до Exported Function-Calls Scheduler блок:
Рисунок 1.29 - Блок Exported Function-Calls Scheduler Обычно системы управления встроенными системами требуют выполнения функций в определенные моменты времени (например, при инициализации, вызовах функций по прерыванию или с заданным периодом). Блок Exported Function-Calls Scheduler управляет моментами исполнения функций в подсистеме вызова функций Function-Call во время симуляции, согласно установленным параметрам блока Block Parameters.
OSEK Resource блок:
Блок OSEK Resource осуществляет доступ к управлению ресурсами OSEK GetResource/ReleaseResource API в начале/конце критических участков кода, занимающих ресурсы, которые нельзя использовать одновременно с другими процессами. В Simulink, критические участки вместе с используемыми ресурсами следует располагать в подсистемы Atomic Subsystem. Для задания идентификатора ресурса его необходимо определить в блоке Exported Function-Call Scheduler. Блок OSEK Resource не влияет на моделирование и необходим только для генерации кода.
Рисунок 1.31 - Пример блока OSEK Resource и сгенерированного кода
1.3 МОДЕЛИРОВАНИЕ И ПРОГРАММИРОВАНИЕ
РОБОТОТЕХНИЧЕСКИХ КОМПЛЕКСОВ НА ОСНОВЕ НАБОРА
LEGO MINDSTORMS
В данной части представлены некоторые модели роботов на основе LEGO Mindstorms, описаны их математические модели и программы управления, написанные с использованием пакета ECRobot NXT.Инструкции по сборке моделей приведены в приложении учебного пособия.
В качестве примера рассмотрим модель робота «исследователь»
(рисунок 1.32). [14] Датчик касания подключен к входному порту № 1, ультразвуковой дальномер – к входному порту № 4. Левый мотор подключен к выходному порту С, правый мотор – к выходному порту В.
Рисунок 1.32 – Модель робота «Исследователь»
Для «исследователя» написана простейшая Simulink-модель «Test.mdl»
(рисунок 1.33), реализующая объезд роботом препятствий. Робот движется прямолинейно, пока не «увидит» вблизи препятствие либо пока не столкнется с ним. После этого он поворачивает и продолжает движение.
Рисунок 1.33 – Simulink-модель управления роботом «test.mdl»
Блок «ExpFcnCalls Scheduler» (планировщик) служит для задания имен функций и их периодичности запуска. В данном примере задана одна функция – «Fcn_100ms» задающая период равным 0,1 сек.
В блоке «Explorer_app» описана функция управления роботом. Данный блок отражает функциональность будущего исполняемого файла. Он содержит в себе один вход и одну подфункцию. Планировщик подает импульсы на вход с заданной частотой (0,01 сек), запуская выполнение подфункции «Function-Call Subsystem».
Подфункция «Function-Call Subsystem» работает следующим образом (рисунок 1.34). Если сигнал с ультразвукового датчика превышает 20 см (препятствие далеко), то на вход сумматора поступает 0, в противном случае 1. На втором входе сумматора появится 1 в случае срабатывания датчика касания (блок «Touch Sensor Read») или 0 в противном случае.
Рисунок 1.34 - Подфункция «Function-Call Subsystem»
Таким образом, на выходе сумматора будет величина, большая 0, если хотя бы один из датчиков зафиксировал препятствие. В зависимости от этого будет выполнена либо подфункция «If Action Subsystem TURN» (поворот робота), либо подфункция «If Action Subsystem FORWARD» (движение вперед). В первом случае один из моторов прекращает вращение, а другой на полной мощности осуществляет движение назад. В случае отсутствия препятствий на оба мотора подается одинаковая мощность, равная 70, и робот движется вперед (рисунок 1.35).
Рисунок 1.35 - Подфункция управления моторами Далее рассмотрим управляющие кнопки, реализующие преобразование модели в исполняемый код.
Кнопка «nxtconfig (gsc, 'float')» - кнопка начальной инициализации блока генерации кода.
Кнопка «nxtbuild ('Explorer_app', 'cgen')» - кнопка запуска генерации исходного кода модели (код генерируется на языке С для последующей компиляции в исполняемый модуль).
По окончании генерации в каталоге «nxtprj» текущей директории появится файл «ecrobot_main.c» с инициализацией функции «Fcn_10ms», а в каталоге «Explorer_app_ert_rtw» появится файл «Explorer_app.c» с кодом, отражающем функционирование блока «Explorer_app» и будущего исполняемого модуля.
Кнопка «nxtbuild ('Explorer_app', 'build')» - кнопка компиляции исполняемого модуля. В итоге в каталоге «nxtprj» текущей директории должен появиться файл «Explorer_app.rxe» который напрямую может быть загружен в NXT.
Кнопка «nxtbuild ('Explorer_app', 'rxeflash')» - кнопка запуска процесса записи исполняемого модуля («Explorer_app.rxe») в память NXT (при условии, что с ним установлено соединение через USB-кабель).
Далее этот файл может быть запущен на NXT. Таким образом, будет реализовано желаемое поведение робота в автономном режиме. [14] В разделах 1.3.1-1.3.3 представлены сложные модели балансирующих роботов, методы расчета их математических моделей, расчета регуляторов, алгоритмы управления и их программная реализация в nxtOSEK. Инструкции www.nxtprograms.com/NXT2/explorer/index.html [14].
1.3.1 Модель одноколейного двухколесного робота «Мотобот»
В данном разделе описывается макет автономного мобильного робота «Мотобот», являющегося моделью двухколесного мотоцикла (рисунок 1.36).
Рисунок 1.36 - Автономный мобильный робот «Мотобот», Анализируется математическая модель движения двухколесного одноколейного робота на плоскости, на основе которой синтезируются алгоритмы автоматического управления. Задача может быть решена путем управления рулевым колесом и скоростью ведущего колеса. Решены локальные задачи стабилизации вертикального положения равновесия, движения вдоль прямой с заданной скоростью. Реализовано дистанционное управление траекторией движения с помощью джойстика и радиоканала связи.
1.3.1.1 Математическая модель робота «Мотобот»
Математическая модель мотоцикла является нелинейной и включает несколько важных параметров таких, как масса мотоцикла, коэффициент трения, расстояние между проекциями колес, моменты инерции составных частей относительно центра масс и другие. Математическая модель состоит из четырех основных частей: рамы, двух колес и рулевой вилки. Приемлемая модель имеет 7 степеней свободы, из них 3 степени свободы угловых скоростей. Модель может быть соответственно параметризованной с помощью следующих переменных: угол крена вдоль поперечной оси, угол поворота с помощью рулевого колеса, и изменение уровня вращения заднего колеса. [5] Рисунок 1.37 - Прототип мобильного робота «Мотобот» и схематическое изображение углов положения составных частей Рассмотрим Декартову систему координат с центром в точке O и осями x, y и z (рисунок 1.37). Заднее колесо R, соединенное с рамой при наличии водителя имеет центр масс в точке B. Центр масс B размещен в следующей области: x B 0, y B 0, z B 0. Момент инерции рамы относительно центра масс представлен матрицей моментов инерции размерности (3 3), где все массы симметричны относительно проекции x z. Центр масс передней части рамы с вилкой и рулем H находится в следующей области x H 0, y H 0, z H 0. Матрицы моментов инерции передней и задней сборок:
Представим линеаризованные уравнения движения:
где T, T, T – обобщенные силы каждой линейной комбинации компонентов различных приложенных сил F.
Принятие полной линеаризации и движения без завала по прямой может быть достигнуто при любой скорости, удовлетворяющей условию v R rR.
Боковая симметрия системы, совмещенная с линейностью уравнений, позволяет получить зависимость между прямолинейным движением и углами падения и поворота. Исходя из этого, линеаризованное уравнение движения для первой степени свободы (движения вперед) просто получить, исследуя систему по осям x z, как:
Линеаризованные уравнения для двух других степеней свободы, угла падения и поворота рулевого колеса это пара совмещенных дифференциальных уравнений второго порядка. Уравнение в канонической форме, где первое уравнение отражает крен, а второе поворот руля M q v C1 q [ g K 0 v 2 K 2 ]q f, где изменяемые во времени переменные q [, ]T и f [T, T ], M – симметричная матрица масс, которая отображает кинетическую энергию мотоцикла как. Матрица затухания C v C1 линейной скорости v и охватывает кососимметрические гироскопические моменты, возникающие из-за уровней крена мотоцикла и рулевого управления.
C1также содержит инерциальные реакции, возникающие во время рулевого управления. Матрица жесткости K состоит из двух частей: независимой от скорости симметричной части g K 0 пропорциональной гравитационному ускорению, которая может быть использована при расчете изменения потенциальной энергии, и части v 2 K 2, которая пропорциональна квадрату скорости и зависит от гироскопического и центробежного эффектов. Таким образом, имеем характеристическое уравнение:
Далее следует рассматривать решения (3) при различных скоростях. На низких и высоких скоростях асимптотическая устойчивость не достижима, в силу физических ограничений, наложенных на управление рулем. На начальных этапах рассматривается диапазон средних скоростей, где решается задача асимптотической устойчивости.
В общем виде модель движения выглядит следующим образом:
где q – обобщенная координата, u – обобщенная скорость, S – кинематическая матрица, которая отображает отношение уровней обобщенных координат к обобщенным скоростям, M – система матриц масс, Q содержит все силы и зависимости от скорости инерции.
1.3.1.2 Нахождение параметров линеаризованной модели движения робота Для описания введем следующие индексы: R – для заднего колеса, B – для задней части рамы совместно с мотоциклистом, H – для передней части с рулем, F – для переднего колеса, T – для системы в целом, A – для сборки передней части рамы с рулем.
Найдем общую массу и расположение центра масс (относительно точки контакта заднего колеса с землей P):
Для вывода момента инерции для всего мотоцикла вдоль оси z используем соответствующие моменты масс и значения инерций по отношению к контактной точке P вдоль общих осей, с учетом зависимости осесимметричных моментов инерции переднего и заднего колес:
Аналогичным образом описывается сборка рамы с рулем A. Рассмотрим вектор sin, 0, cos T, направленный вниз вдоль рулевой оси, где – угол на плоскости x z. Центр масс передней сборки расположен выше руля, перпендикулярно u A ( xA w c) cos z A sin. Для сборки А требуются три специальных величины инерции: момент инерции относительно оси руля и значения инерции, относительно смещенных и косых осей, взятых около точки, где они пересекаются. Из этих соотношений берется момент около одной оси, возникающий из-за углового ускорения около других.
Отношение механического трейла (расстояние между осью передней вилки и нормалью из передней оси на проекции земли) к базе колес Угловые моменты заднего и переднего колес вдоль оси y, вычисленные с помощью линейной скорости, вместе с их суммой из гиростатических коэффициентов:
Сформируем параметры линеаризованных уравнений движения.
K0 S A sin – гравитационные коэффициенты жесткости (умноженные на C1 (ST S F cos ) – коэффициенты матрицы «затухания» C.
1.3.1.3 Расчет параметров регулятора Запишем уравнения баланса угловых моментов. Баланс углового момента крена относительно продольной оси:
Баланс углового момента рыскания относительно точки P:
Баланс углового момента руля для передней сборки:
Используя выражение, характеризующее изменение угла крена относительно изменения угла рыскания рамы получим итоговое выражение баланса мотоцикла:
Уравнения задания положения мотоцикла относительно задней контактной точки:
Для модели вход-состояние-выход, где x,,, – вектор состояния, найдем закон управления u T. Расчет регулятора для случая адаптивной системы будем проводить с помощью алгоритма «полоска».[27] Для неадаптивной системы воспользуемся линейно-квадратичным регулятором с критерием качества J ( x T Q u x u T R u u )dt, где Q u и R u – диагональные матрицы штрафов по состоянию и управлению. Выберем Qu diag{0, 0,1, 0}, так как итоговая цель балансирования мотоцикла, удержание вертикального положения, может быть достигнута минимизацией угла крена. Для контроля усилий возьмем R u 1.
Алгоритм управления рулевым колесом по измерению угла крена выберем в виде ПИД-регулятора (пропорционально-интегральнодифференциальный), коэффициенты которого подберем методом ЦиглераНикольса k p 8,23 – для пропорционального, ki 1,48 – для интегральный и k d 2,76 для дифференциального составляющих сигнала управления.
1.3.1.4 Физические параметры модели Для этой модели параметры приведены в таблице 1.
M=0. M_front=0. M_rear=0. L_base =0. L_trail = 0. Head_angle = 1.3.1.5 Описание программы Motobot’а Главная управляющая схема (рисунок 1.39). Схема, приведенная ниже, отражает главное окно программы. В левой части расположены входные блоки, в правой - выходные. Это довольно общая схема, которая состоит из k-подсистем, отвечающих за различные функции.
Непосредственно на схеме расположены такие блоки, как: уровень заряда батарей, системные часы, протоколы передачи и приема сигналов через Bluetooth, звуковые генераторы, гироскопический датчик, ультразвуковой датчик расстояния, энкодеры сервоприводов и сами сервопривода, а также модуль согласования задач, обобщенный блок основной программы и кнопки интерфейса для пользователя. Остальные схемы содержатся в блоке nxtway_app.
На рисунке 1.40 изображена общая схема контроллера со всеми входами/выходами. Также показаны сигналы, передающие данные на запись, которая ведется через протокол Bluetooth. Сервопривода A и B принимают одинаковые управляющие сигналы, так как оба являются приводами ведущего колеса и расположены с двух сторон колеса для симметрии масс модели.
На рисунке 1.41 представлена схема управления. Открыть ее можно через:
nxtway_app/Balance & Drive control/Balance & Drive Control/Controller Верхний усилитель k_thetadot используется в качестве коэффициента Прегулятора сигнала thetadot_ref, для регулирования скорости заднего колеса.
Второй усилитель умножается на ошибку сигнала (x1_ref-x1), где x1=[phi phidot phidotdot] – вектор, отражающий угол наклона рамы motobot’a и две его производных.
Управление положением модели в пространстве. На следующем рисунке phi_cmd – задаваемый угол положения рамы motobot’a, изначально равный 0. Как правило, когда этот угол изменяется (например после подачи управляющих сигналов с джойстика) появляется возможность рулевого управления для стабилизации.
Также здесь определен параметр thetadot_cmd. Набор постоянных значений для данной скорости изменения угла доступен благодаря переключателю. Скорость может быть изменена с помощью управления через джойстик по Blutooth. [15] Рисунок 1.42 - Схема управления положением модели в пространстве Вычисление входных сигналов. Как представлено на следующей схеме (рисунок 1.43), theta_in (значение положения заднего колеса) конвертируется в радианы и дифференцируется для получения скорости thetadot (рад/с).
Производная для получения скорости вычисляется с периодом 0.004 мс.
Данные с гироскопа конвертируются и затем трансформируются в массив x1, который получается путем дифференцирования в phi_dotdot и интеграции в phi. Значения обновляются с периодом 0.004 мс.
Рисунок 1.43 – Схема вычисления входных сигналов Вычисление сигналов, поступающих на сервоприводы. Далее показано как сигналы для сервоприводов корректируются с текущим значением заряда аккумулятора (рисунок 1.44). Также на схеме присутствуют компенсатор колебаний и ограничитель сигналов.
Рисунок 1.44 – Схема вычисление сигналов, поступающих на 1.3.1.6 Результаты эксперимента Используя утилиту NXT GamePad можно получать и записывать значение угла крена мотоцикла с гироскопа и угол поворота рулевого колеса с энкодера серводвигателя. На рисунке 1.45 представлены графики данных, полученных при тестировании модели.
Рисунок 1.45 – Временные диаграммы процессов в роботе «Мотобот»:
а) угол крена мотоцикла [град./cек.]; б) угол поворота рулевого колеса 1.3.2 Модель робота «Segway»
1.3.2.1Расчет математической модели Балансирующий робот «Segway» (рисунок 1.46) представляет собой однозвенный перевернутый маятник. Стабилизация его верхнего неустойчивого положения равновесия относится к числу классических задач механики и теории управления. Задача может быть решена путем горизонтального перемещения точки подвеса маятника. Перевернутый маятник - это модель системы, управляющей положением корпуса ракеты на активном участке полета.
Рисунок 1.46 - Балансирующий робот «Segway»
Математическая модель перевернутого маятника является нелинейной и включает несколько важных параметров таких, как масса маятника, коэффициент трения, расстояние между осью маятника и его центром масс, момент инерции маятника относительно центра масс.
Рисунок 1.47 – Схема сил, действующих на балансирующий робот.
M – масса основания;
m – масса маятника;
b – коэффициент трения при движении;
L – расстояние между осью маятника и центром его масс;
J – момент инерции маятника относительно центра масс;
u(t) – управление, прикладываемое к основанию;
x(t) – координата основания;
(t) – угол отклонения маятника от вертикали;
H(t) – горизонтальная сила реакции на оси маятника;
V(t) – вертикальная сила реакции на оси маятника;
g – ускорение свободного падения.
Для представленной системы справедливы следующие уравнения:
Раскрывая скобки в уравнениях (6) и (7), получим:
Подставив выражение для H(t) из уравнения (10) в уравнение (9), получим:
Подставив выражения для H(t) из уравнения (10) и для V(t) из уравнения (11) в уравнение (8), получим:
подвижной точкой опоры.
Для решения задачи классическими методами теории автоматического управления необходимо линеаризовать уравнения (12) и (13) и записать их в форме уравнений в переменных состояния.
Линеаризацию в окрестностях t 0, xt 0, ut 0 легко выполнить, разлагая sin t и cos t в ряды Тейлора и подставляя в уравнения (12) и (13) только первые члены рядов:
Основываясь на линеаризованных уравнениях системы найдем ее передаточную функцию, полагая, что входом является управляющие воздействие u(t), а выходом – угол отклонения маятника от вертикали (t).
преобразование Лапласа и обозначив Ф(s) и U(s) изображения по Лапласу функций (t) и u(t) соответственно получим:
И искомая передаточная функция примет вид:
апериодическое звено первого порядка:
Теперь запишем уравнения данной системы в переменных состояния.
Введем следующие переменные состояния системы:
Тогда уравнения (12) и (13) запишутся в виде:
Преобразуя данные уравнения можно получить:
Окончательно, в матричной форме уравнение можно записать:
где Уравнение выхода запишется (при искомых t и xt ) в следующем виде:
1.3.2.2 Расчет регулятора 1. Устойчивость Будем называть систему асимптотически устойчивой, если ее установившееся значение будет стремиться к нулю независимо от начальных условий, при отсутствии входных воздействий:
Состояние объекта описывается следующим уравнением Для того, чтобы система была асимптотически устойчива необходимо и достаточно, чтобы действительные части всех собственных чисел матрицы А были отрицательны.
2.Управление состоянием объекта по обратной связи Управляющее воздействие по обратной связи представляет собой произведение коэффициента пропорциональности К и разницы между желаемым значением xref и измеренным x.
Управляющее воздействие и состояние системы, изображенной на рисунке 1.48, описывается следующими уравнениями:
Далее сделаем систему устойчивой, рассчитав значения матрицы К, так как изменение значений влечет за собой изменение собственных чисел матрицы А-ВК.
Для регулирования системы необходимо, чтобы она была управляемой.
Система управляема, если ранг матрицы М совпадает с рангом матрицы А, где:
В среде Control System Toolbox для определения управляемости можно использовать команду ctrb.
Существует два основных метода расчета коэффициентов обратной связи.
1. Расчет по желаемым корням.
Метод заключается в расчете коэффициентов К на основании желаемых собственных чисел матрицы А-ВК. Выбор желаемых чисел осуществляется подбором. Для расчета в Control System Toolbox для расчета можно воспользоваться функцией place.
Например, рассчитайте коэффициенты обратно связи для системы, с матрицами A=[0, 1; -2; -3], B=[0;1] Желаемые собственные числа: [-5, -6] 2. Линейный квадратичный регулятор Метод заключается в расчете коэффициентов матрицы К на основании минимизации значения функционала J, рассчитываемого следующим образом:
Настройка параметров обеспечивается подбором весовых матриц состояния Q и входного воздействия R, которые выбираются исходя из физической природы процессов. В Control System Toolbox для расчета регулятора используется функции lqr.
Например:
A=[0, 1; -2, -3], B=[0; 1], Q=[100, 0; 0, 1]; R= 1.3.2.3 Управление сервоприводами Управление сервоприводами необходимо для того, чтобы вырабатывать желаемое механическое движение системы. Для этой цели чаще всего используется ПИД-регулятор - устройство в цепи обратной связи, используемое в системах автоматического управления для формирования управляющего сигнала. ПИД-регулятор формирует управляющий сигнал, являющийся суммой трёх слагаемых, первое из которых пропорционально входному сигналу, второе — интеграл входного сигнала, третье — производная входного сигнала.
Назначение ПИД-регулятора — в поддержании заданного значения x некоторой величины x с помощью изменения другой величины u. Значение x0 называется уставкой, а разность e = (xref x) — невязкой или рассогласованием.
Выходной сигнал регулятора u определяется тремя слагаемыми:
где Кp, Кi, Кd — коэффициенты усиления пропорциональной, интегральной и дифференциальной составляющих регулятора, соответственно.
1.3.2.4 Физические параметры модели Рисунок 1.50 – Обозначение параметров модели J = M(W2+D2)/12 (кгм2) вращательный момент инерции Kb = 0.468 (Всек/рад) постоянная противо-ЭДС 1.3.2.5 Описание программы Segway Главная управляющая схема. Схема, приведенная ниже, отражает главное окно программы. Ключевые блоки программы описаны в предыдущем разделе, при рассмотрении робота Motobot. Остальные схемы содержатся в блоке nxtway_app.
На следующем рисунке изображена общая схема модели со всеми входами/выходами. Также показаны сигналы, передающие данные на запись, которая ведется через протокол Bluetooth.
Рассмотрим детально некоторые из составных блоков.
Reference Generator – это блок, передающий и ограничивающий управляющие воздействия на контроллер.
Рисунок 1.52 – Схема генератора управляющих воздействий На рисунке 1.51 «Controller» – это блок, обозначающий контроллер NXT. С левой стороны расположены блоки, служащие для приема данных с датчиков, энкодеров, Bluetooth, с правой стороны расположены блоки, служащие для передачи сигналов на двигатели и Bluetooth Блок контроллера работает в системе дискретного времени, а блок модели в режиме непрерывного времени, поэтому необходимо преобразование передаваемых величин.
Рисунок 1.53 – Схема АЦ и ЦА преобразования сигналов На рисунке 1.54 «NXTway-GS» - подсистема, состоящая из датчиков, приводов, и линеаризованной модели робота. Она преобразует тип входных данных сигналов в вещественный, рассчитывает динамику робота, и выводит результаты после дискретизации. Эта подсистема определяет параметры среды.
Рисунок 1.54 – Схема управления сервоприводами в зависимости от На рисунке 1.54 «Actuator»– это подсистема, преобразующая мощность задаваемую контроллером в напряжение, подаваемое на двигатели.
«Plant» - модель, описываемая уравнениями двойного перевернутого маятника, которая работает с учетом калибровки гироскопа.
Рисунок 1.56 – Подсистема состояния модели Блок Sensor преобразует значения, полученные о состоянии модели в выходные сигналы датчиков. Дополнительно вычисляется расстояние до препятствий, получаемое с ультразвукового датчика расстояния.
Информация может быть использована для определения препятствий и избегания столкновений с ними.
Рисунок 1.58 - nxtway_gs_controller.mdl Блоки Data Store Memory используются, как общие блоки данных для распределения данных между подзадачами.
Рисунок 1.59 – Распределенные блоки данных task_ts2: отвечает за обнаружение и уклонение от препятствий.
task_ts3: отвечает за подсчет времени и проверку уровня заряда батареи.
task_ts1: служит для калибровки гироскопа, балансировки; управления и записи данных. Балансировка и управление запускаются после калибровки гироскопа. Время калибровки сохраняется как time_start.
Далее представлены подсистемы балансировки и управления.
Рисунок 1.63 – Модель контроллера для управления в режиме балансировки На схеме, показанной на рисунке 1.64 представлен «Discrete Derivative Block», который вычисляет постоянную времени методом обратного дифференцирования и «Discrete Integrator Block», который вычисляет временной интеграл методом Эйлера.
Рисунок 1.64 - Discrete Derivative и Discrete Integrator Block Также на рисунке 1.64 присутствуют блоки, отвечающие за расчет уровня сигнала, использующие низкочастотный фильтр для уменьшения резких скачков, вызванных резкими изменениями скорости генерируемого сигнала.
Рисунок 1.65 – Расчет генерируемых управлений Следующая подсистема рассчитывает состояние системы, используя выходные сигналы датчиков. Используется длительное усреднение данных гироскопа для удаления гиродрифта, а также низкочастотный фильтр для удаления шумов в сигнале скорости.
Следующая подсистема отвечает за расчет мощности, подаваемой на сервоприводы.
1.3.2.6 Результаты моделирования Используя утилиту NXT GamePad можно получать и записывать значение угла наклона робота с гироскопа и положения робота относительно начала движения используя значения энкодера одного из серводвигателей.
На рисунках 1.68 и 1.69 представлены графики данных, полученных при балансировании робота на месте и движении робота соответственно.
Рисунок 1.68 – Результат моделирования при балансировании Рисунок 1.69 – Результаты моделирования при движении 1.3.3 Модель робота «Болбот»
1.3.3.1 Расчет математической модели Рассматривается модель робота «Болбот» (рисунок 1.70), в которой движения в продольном и поперечном направлениях не связаны, и уравнения движения в этих двух плоскостях одинаковы. Тогда болбот можно рассматривать как две модели отдельных одинаковых перевернутых маятников на сферическом катке [1], как на рисунке 1.65.
Рисунок 1.70 – Балансирующий робот «Болбот»
Двигатель вращает сферический каток через колесо с резиновой покрышкой. Допускается, что между ними нет скольжения. m – угол поворота двигателя. Rwm Rss (рисунок 1.71).
Рисунок 1.71 – Двигатель с присоединенным колесом и сферический Опишем уравнение движения перевернутого маятника на сферическом катке методом Лагранжа, основываясь на системе координат, указанной ранее. Если =0 при t=0, тогда каждая координата задаётся следующим образом:
Кинетическая энергия поступательного движения T1, вращательного движения T2, потенциальная энергия U записываются следующим образом:
Лагранжиан L имеет вид:
Используем и как обобщенные координаты. Уравнение Лагранжа имеет вид:
С учетом постоянного крутящего момента двигателя и вязкого трения, обобщенные силы описываются:
где i – ток двигателя; m k ( ) – угловая скорость двигателя.
Пренебрегая трением внутри двигателя и индуктивностью, обобщенные силы выражаются [4]:
0(sin, cos 1) и пренебрегая слагаемым второго порядка, запишем в векторно матричной форме:
Обозначим через x – вектор состояния; u – вход.
Таким образом, представим уравнения состояния в форме Коши:
A(3,2) Mb gLE(1,2) / det( E) A(4,2) M b gLE(1,1) / det( E) A(3,3) [( f s ) E(2,2) E(1,2)] / det( E) A(4,3) [( f s ) E(1,2) E(1,1)] / det( E) A(3,4) [ E(2,2) E(1,2)] / det( E) A(4,4) [ E(1,1) E(1,2)] / det( E) B(3) [ E(2,2) E(1,2)] / det( E) B(4) [ E(1,1) E(1,2)] / det( E) det( E ) E (1,1) E (2,2) E (1,2)2.
1.3.3.2 Расчет регуляторов На вход системы управления подается напряжение управления двигателями. Выходом системы являются значения с энкодеров угла поворота двигателя m и угловая скорость отклонения конструкции от вертикали. Численное значение угла отклонения получается путем интегрирования угловой скорости. Начальные условия при интегрировании определяются из условия вертикального запуска, выбранного положения объекта.
Положение равновесия является неустойчивым. При минимальном отклонении, необходимо двигать болбот в направлении угла наклона конструкции, чтобы удержать баланс.
Линейно-квадратичный регулятор. Для решения задачи удержания перевернутого маятника в положении неустойчивого равновесия синтезируется пропорционально-интегральный регулятор (рисунок 1.72). C – матрица выхода для получения из x.
Рисунок 1.72 - Схема пропорционально-интегрального регулятора Рассчитаем коэффициенты пропорциональной и интегральной составляющих на основе метода линейно-квадратичного регулятора.
Линейно-квадратичный регулятор – в теории управления один из видов оптимальных регуляторов, использующий квадратичный функционал качества [28]. Выберем весовые матрицы Q и R [29]:
где Q(2,2) – элемент весовой матрицы состояния, характеризующий вес значения угла отклонения конструкции, Q(5,5) – элемент весовой матрицы состояния, характеризующий вес по времени интегрирования разницы между ранее измеренным углом и полученным.
Используя полученные ранее математическую модель робота и весовую матрицу, рассчитаем в среде Matlab численные значения коэффициентов для пропорциональной и интегральной составляющих. Функция lqr вычисляет матрицу коэффициентов регулирования со среднеквадратичным функционалом качества [30].
В результате вычислений получается набор коэффициентов:
kf = [–0,015 –1,5698 –0,027 –0,2325], ki = –0,0071.
Качественная экспоненциальная устойчивость. Построим регулятор, обеспечивающий экспоненциальную сходимость со следующими показателями качества: tп 0,36 c; п 0.
В линейных системах подлежит минимизации квадратичный критерий качества:
Непрерывная система экспоненциально устойчива в точке x 0, если существуют такая квадратичная функция Ляпунова где P PT – положительно определенная n n матрица, и такой параметр : 0, при которых на всех траекториях движения системы в любой момент времени t 0 выполняется условие:
Данное условие имеет место, если справедливо уравнение:
Подставив квадратичную функцию Ляпунова и ее производную, получим:
на основе которого, воспользовавшись методом локальной оптимизации [31], находим оптимальное управление:
Получим систему матричных уравнений типа Риккати [31]:
Так как матрицы A, B, Q, R постоянны, то процесс достигает установившегося состояния в том смысле, что становится постоянной матрица P ( P 0 ):
Из матричных алгебраических уравнений, получается следующая матрица обратных связей K регулятора: K f [0,0117 1,4993 0,0284 0,2432].
1.3.3.3 Физические параметры модели 1.3.3.4 Описание программы Ballbot Главная управляющая схема Ключевые блоки главной схемы схожи с представленными в предыдущих разделах, поэтому остановимся на ключевых, отличительных особенностях подсистем данного робота.
Рассмотрим детально некоторые из составных блоков.
На рисунке 1.73 представлена подсистема «NXT Ballbot», состоящая из датчиков, приводов, и линеаризованной модели робота. Данная подсистема преобразует тип входных данных сигналов в вещественный, рассчитывает динамику робота и выводит результаты после дискретизации. Эта подсистема определяет параметры среды. Данная подсистема, состоит из датчиков, приводов, и линеаризованной модели робота. Она преобразует тип входных данных сигналов в вещественный, рассчитывает динамику робота, и выводит результаты после дискретизации.
Некоторые сигналы векторизованы для одновременного расчета по осям X и Y.
Рисунок 1.74 – Перевод сигналов в векторную форму На рисунке 1.75 представлена подсистема, преобразующая мощность задаваемую контроллером в напряжение, подаваемое на двигатели.
Рисунок 1.75 – Подсистема сервоприводов На рисунке 1.76 представлена модель, описываемая уравнениями перевернутого маятника на сферическом основании, которая работает с учетом калибровки гироскопа.
Рисунок 1.76 – Подсистема состояния модели Блок Sensor преобразует значения, полученные от подсистемы состояния модели в выходные сигналы.
Блок «ExpFcnCalls» содержит конфигуратор имен задач, периодичности задач, платформ и размера стека.
Блоки «Data Store Memory» используются, как общие блоки данных для различных задач.
Инициализатор задач задает задачам начальные значения. Мы можем переключать режим работы (автономный или управление с помощью джойстика) Подсистемы task_ts2-4 имеют вид, аналогичный с подсистемами Segway.
Подсистемы балансировки и управления.
Рисунок 1.80 – Подсистемы балансировки и управления Следующая подсистема рассчитывает управляющие команды в зависимости от режима работы и показания ультразвукового датчика.
Рисунок 1.81 – Подсистема управляющих команд Следующая подсистема рассчитывает состояние системы, используя выходные сигналы датчиков. Используются усредненные показания гироскопов для компенсации негативного эффекта от гиродрифта, и низкочастотный фильтр для исключения шумов в сигнале скорости.
Рисунок 1.82 – Подсистема состояния робота Следующая подсистема отвечает за расчет мощности, подаваемой на сервоприводы.
Рисунок 1.83 – Подсистема расчета величины управлений 1.3.3.5 Результаты моделирования Используя утилиту NXT GamePad можно получать и записывать значения углов наклона робота по осям и скорости их изменения используя данные с гироскопов. Также можно получить положение робота относительно начала движения используя значения энкодеров, расположенных в серводвигателях. На рисунках 1.84 и 1.85 представлены графики данных, полученных при балансировании робота с использованием двух описанных выше регуляторов. [4] Рисунок 1.84 - Показания при использовании линейно-квадратичного угол поворота двигателя (а); скорость изменения угла крена (б) Рисунок 1.85 - Показания при использовании регулятора на основе метода качественной экспоненциальной устойчивости: угол поворота двигателя (а); скорость изменения угла крена (б) Таким образом, используемая система nxtOSEK является универсальной в том смысле, что предоставляет возможность разноуровневого подхода к реализации алгоритма управления роботом. С одной стороны nxtOSEK – это инструмент наглядного графического моделирования с использованием оптимальным будет использование ECRobot для быстрой конвертации готовой Simulink-модели в исполняемый роботом файл. С другой стороны nxtOSEK – это мощный инструмент программирования на языках высокого уровня. Поэтому на дальнейших этапах совершенствования возможны либо корректировка сгенерированных С-файлов, либо независимое создание более сложных модулей на языках С/С++ с реализацией всех возможностей объектно-ориентированного программирования.
2 РОБОТОТЕХНИЧЕСКИЙ КОМЛЕКС BIOLOID PREMIUM KIT
Набор Bioloid предназначен для обучения в области разработки и отладки сложных робототехнических систем. Набор включает в себя небольшие сервоприводы, называемые Dynamixel и представляющие собой самостоятельные модули, с помощью которых могут быть собраны роботы различной конструкции, например колёсные или шагающие роботы [18].Набор Bioloid схож с наборами LEGO Mindstorms от компании LEGO и Vex Robotics Design System от компании VEX Robotics. Набор используется в Военно-морской академии США как учебное оборудование в курсе машиностроения [16]. Так же набор Bioloid часто используют участники международных соревнований RoboCup [22].
BIOLOID Premium Kit – робототехнический набор (рисунок 2.1), на базе которого пользователь может создать различные механизмы. Но в отличие от множества других популярных конструкторов, любая модель, разработанная пользователем, может быть приведена в действие при помощи специальных приводов и управляющих контроллеров. Название BIOLOID получено путем сложения слов «bio»+ «all»+ «oid», что свидетельствует о том, что любое живое существо может быть представлено в виде робота (рисунок 2.1).
Рисунок 2.1 – Возможные модели из набора Bioloid Используя универсальные модули и различные аппаратные компоненты (рисунок 2.2), входящие в набор, а так же с помощью специального программного обеспечения, можно собрать робота и запрограммировать его движения. В комплект Bioloid входят сервоприводы Dynamixel, набор сенсоров, программное обеспечение, включающее в себя среду 3D моделирования и среду программирования на С-подобном языке. Количество приводов достаточно, чтобы изготовить механизм с восемнадцатью степенями свободы.
Рисунок 2.2 – Компонентная база набора Bioloid Premium Kit CM-510 – микроконтроллер на базе ATmega2561 с портами для датчиков и сервомоторов DYNAMIXEL (рисунок 2.3):
Рисунок 2.3 – Возможности микроконтроллера СМ-
2.1 ВОЗМОЖНОСТИ СЕРВОПРИВОДОВ DYNAMIXEL
Сервопривода Robotis Dynamixel Servos одинаково востребованы как у профессионалов, так и у любителей в области робототехники. Они по праву занимают свое место между легкодоступными сервоприводами, применяемыми в различных любительских управляемых моделях, и прецизионными профессиональными сервоприводами, обладающими дорогой и точной механической конструкцией (например, на базе волновых зубчатых передач) и сложной системой управления.Специально для использования совместно с робототехническими комплексами BIOLOID разработан управляющий контроллер СМ- (рисунок 2.4).
Рисунок 2.4 - Микроконтроллер СМ-510 с подключенными сервоприводами Использование данного контроллера и программного обеспечения для его конфигурирования позволяет облегчить задачу управления робототехническими системами. Функционал системы управления, построенной данным образом, позволяет сосредоточить максимум усилий на алгоритмах управления высокого уровня, освобождая пользователя от необходимости разработки и отладки устройств и приложений для управления отдельными сервоприводами.
Одна из основных черт сервоприводов Dynamixel – это простота и модульность конструкции и системы управления. Многообразие специальных крепежных скоб позволяет легко собрать любую конструкцию.
Большой диапазон рабочих моментов от 16 кг*см до 106 кг*см обеспечивает возможность применения этих сервоприводов в различных конструкциях.
В случае, когда крутящего момента одного сервопривода не достаточно, можно объединить два с помощью специальной крепежной скобы.
Использование двух сервоприводов Dynamixel, синхронно работающих на общую нагрузку, позволяет удвоить крутящий момент в любом из пользовательских применений (рисунок 2.5).
Рисунок 2.5 – Скрепление двух сервоприводов Dynamixel крепежной Возможность решать с помощью сервоприводов Dynamixel задачи, связанные с точным позиционированием в пространстве, обеспечивается благодаря точной механике. В основе Dynamixel применяются всемирно металлической зубчатой передачей обеспечивает поддержание точности работы 0.35-0.07 угловых градусов во всем диапазоне рабочих моментов (рисунок 2.6).
2.1.1 Система управления сервоприводами Dynamixel Система управления строится на базе специальной печатной платы, содержащей силовую электронику и управляющий контроллер. В качестве управляющего «мозга» и коммуникационного модуля выступает микроконтроллер AVR ATmega. Благодаря функциональным возможностям микроконтроллера и набору специального программного обеспечения, процесс управления приводами Dynamixel становится легкодоступным как профессионалам, так и любителям.
Рисунок 2.7 – Управления сервоприводами Dynamixel посредством Пользователь может разработать собственную систему управления на базе специального протокола, предоставляемого компанией ROBOTIS (более подробно см. в руководствах пользователя). Управляющая электроника сервоприводов Dynamixel поддерживает стандартные последовательные протоколы RS-232 и RS-485 в зависимости от модели сервопривода (рисунок 2.8).
Рисунок 2.8 – Поддержка протоколов RS-232 и RS-485 управляющей 2.1.2 Технические характеристики серводвигателей Dynamixel Размеры: 32мм * 50мм * 40мм;
Разрешение: 0,29°;
Передаточное отношение: 254: 1;
Момент опрокидывания: 1.5Нм (12В, 1.5А);
Скорость без нагрузки: 59rpm (при 12В);
Степень вращения: 1) 0° ~ 300°; 2) бесконечные вращение;
Рабочая температура:
-5 ~ +70;
Напряжение: 9 ~ 12В (рекомендуемое напряжение 11,1В);
Управляющий сигнал: цифровой пакет;
Тип протокола: полудуплексный асинхронный последовательный протокол (8бит, 1стоп-бит, без проверки четности);
Скорость передачи данных: 7343bps ~ 1Mbps;
Обратная связь: положение, температура, нагрузка, входное напряжение, и т.д.;
Материал: технический пластик.
2.2 ОБЗОР ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Разработка системы управления представляет собой неотъемлемый процесс «оживления» робота, представляющий собой реализацию алгоритмов и программ управления в специально предназначенной для этого среде разработки. В зависимости от сложности поставленных задач меняется и применяемый разработчиком инструментарий.Компания Robotis предлагает собственную среду разработки RoboPlus (рисунок 2.9), состоящую из следующих компонентов: RoboPlus Terminal, RoboPlus Task, RoboPlus Manager, RoboPlus Motion, RoboPlus Help & eManual. Данное программное обеспечение является единым для всей продукции Robotis и может применяться для семейства OLLO, Bioloid, Expert kit [23].
Компонента RoboPlus Manager (рисунок 2.10) предназначена для диагностики оборудования, входящего в состав робота. При помощи RoboPlus Manager можно задавать базовые настройки параметров каждой из компонент робота – сервоприводов, контроллера и т.д. RoboPlus Manager может применяться для обновления драйверов оборудования и контроллеров, выпускаемых компанией Robotis.
Рисунок 2.10 – Интерфейс RoboPlus Manager С помощью RoboPlus Manager можно распределять ID между сервоприводами, входящими в состав робота. Для каждого из сервоприводов Dynamixel можно задавать набор различных ограничений: ограничение момента, ограничение углов поворота, ограничение максимальной скорости, предел тепловой защиты и т.д. Также, RoboPlus Manager обеспечивает возможность работы со всем семейством Dynamixel, с контроллерами СМСМ-510,СМ-700 и модулем беспроводной связи Zigbee.
RoboPlus Terminal (рисунок 2.11) является инструментом, дающим пользователю возможность управлять контроллером СМ-510 посредством текстовых команд при помощи специального интерфейса. Данная среда является обычным терминалом последовательного порта, при помощи которого можно осуществлять прием и передачу данных между компьютером и контроллером СМ-510. Также прошивка микроконтроллера осуществляется с помощью вышеописанного терминала или Boot Loader.
RoboPlus Motion (рисунок 2.12) – среда разработки, позволяющая задавать последовательность движений исполнительных механизмов и моделировать полученный результат.
Окно среды разработки состоит из трех частей. Слева расположен список последовательностей действий робота, соответствующий загруженной в контроллер СМ-510 программе. Каждое действие, выполняемое роботом, может быть представлено в виде совокупности отдельных шагов, разнесенных по различным временным интервалам.
Каждый шаг редактируется в центральном окне пользовательского интерфейса.
Справа во вкладке Basic Pose Editor отображаются задаваемые положения каждого из приводов робота, соответствующие выбранному шагу, и положение приводов робота на текущий момент. Во вкладке Pose Utility отображается конфигурация робота, получаемая вследствие переходов между определенными шагами или выполнения заданных операций.
Данная среда предоставляет возможность путем простых манипуляций создать программу, заставляющую робота выполнять различные движения.
Возможность пошагово наблюдать за ходом разработки в окне моделирования и на реальном макете существенно упрощает процесс разработки и дает представление о будущих результатах [24].
RoboPlus Task (рисунок 2.13) применяется для программирования робота посредством набора стандартных команд, предназначенных для реализации определенных действий и последовательностей, организации циклов, выполнения условий.
Однако RoboPlus Motion совместно с RoboPlus Task не обладают необходимым функционалом для построения сложных систем управления ознакомительных этапах работы с комплексом.
Для решения более сложных задач компания Robotis предоставляет возможность написания программного обеспечения исполнительного уровня.
Специально для этого разработаны множество библиотек для работы с базовым оборудованием на языке С [17]. Программирование контроллеров серии СМ, а именно - микроконтроллера семейства ATmega, осуществляется с помощью Atmel Studio, WinAVR или AVRStudio на усмотрение разработчика. Остановимся на среде разработки Atmel Studio 6, так как она является развитием AVR Studio 5, и поэтому унаследовала все её возможности. Она построена на базе Microsoft Visual Studio Shell 10 с надстройкой Visual Assist, что вкупе обеспечивает удобную разработку проектов как на C/C++.
Atmel Studio 6 включает в себя набор библиотек Atmel Software Framework, где в исходных кодах реализованы библиотеки для работы со всеми периферийными устройствами микроконтроллеров, а для упрощения их освоения, в состав Atmel Studio 6.0 включено более 1000 примеров проектов, использующих эти библиотеки. В Atmel Studio 6 также реализован функционал просмотра содержимого набора библиотек Atmel Software Framework (ASF Explorer) и интегрирована библиотека Qtouch composer, служащая для создания сенсорных интерфейсов [25].
Редактор имеет функционал: подсветка синтаксиса, интерактивные "подсказки", автодополнение ключевых слов, и т.д. Интегрированная среда разработки содержит ряд "мастеров", помогающих в подключении нужных драйверов из Framework, настройки периферии, параметров компиляции и т.п.
Особенности программы «Atmel Studio»:
1. Помощь в отладке Atmel приложений;
2. Удобная среда для работы;
3. Редактирование кода;
4. Приложение имеет большую библиотеку с примерами исходных кодов;
5. Atmel Studio находится в свободном доступе.
После написания кода программы на языке С его необходимо скомпилировать. Полученный после компиляции в Atmel Studio.hex файл необходимо загрузить в микроконтроллер. Для этого можно использовать RoboPlus Terminal:
1) Для создания подключения микроконтроллера c компьютером Стандартная скорость подключения 57600bps. Серийные настройки подключения приведены ниже:
Бит четности: без проверки четности;
Стоп-бит: 1 бит Бит данных: 8 бит микроконтроллер, после чего на экране появится следующая информация (рисунок 2.15):
Рисунок 2.15 – Соединение контроллера CM-510 (ATmega2561) с 3) Ввести команду «L» (рисунок 2.16), выбрать "Transmit File" в меню RoboPlus Terminal, а затем выбрать подготовленный.hex файл;
Рисунок 2.16 – Загрузка.hex файла в контроллер 4) После завершения передачи файла, можно выполнить программу с помощью команды "GO".
Положение запуска программы может быть установлено командами APP/SYS. Как только положение запуска программы установлено, программа выполняется со стартовой позиции при включении питания или сбросе.
Карта памяти ATmega2561 приведена на рисунке 2.17.
Также RoboPlus Terminal позволяет производить запись в файл, например в формате.txt.
ПРОГРАММИРОВАНИЕ РОБОТОТЕХНИЧЕСКОГО
КОМПЛЕКСА BIOLOID НА ЯЗЫКЕ С
Все необходимые библиотеки для работы с микроконтроллером ATmega2561 содержатся в Atmel Studio. Для использования сервоприводов Dynamixel и организации последовательной связи необходимо подключить специальные библиотеки: serial.h и dynamixel.h. При использовании передачи данных по Zigbee протоколу необходимо подключить библиотеку libzigbee.h [17].Далее приведена карта портов микроконтроллера CM-510 и таблица управления сервоприводами Dynamixel.
2.3.1 Карта портов микроконтроллера CM- Рисунок 2.18 - Карта портов микроконтроллера CM- Таблица 2.1Порты микроконтроллера СМ-510 и выполняемые ими PORTF1 ~ PORTF PORTD PORTD1 ~ PORTD PORTA2 ~ PORTA PORTC0 ~ PORTC PORTB PORTE4 ~ PORTE PORTD4 ~ PORTD Рисунок 2.19 – Порт А микроконтроллера СМ- Порт А микроконтроллера:
2.3.2 Таблица управления сервоприводами Dynamixel Таблица управления (таблица 2.2) состоит из данных внутри Dynamixel, касающихся текущего состояния и эксплуатации серводвигателя.
Пользователь может управлять Dynamixel путем изменения данных таблицы управления с помощью пакетов инструкций.
Память EEPROM и RAM. Данные в области оперативной памяти (RAM) сбрасываются в начальное значение при включении питания, в то время как записи данных в области EEPROM сохраняются, даже если питание выключено.
Адрес представляет собой расположения данных для чтения или записи в управляющую таблицу. Для этого пользователь должен назначить правильный адрес в пакете инструкций.
Доступ. Dynamixel имеет два вида данных: данные только для чтения (R), которые используются для считывания, и данные для чтения и записи (RW), которые используются для управления.
Начальное значение. Начальные значения данных в области EEPROM обуславливаются заводскими настройками, в случае оперативной памяти указанные в таблице начальные значения устанавливаются при включении питания.
Старший / младший байт. В управляющей таблице, для некоторых данных требуется 16 бит, поэтому эти данные разделены на два адресных пространства по 8 бит – старший и младший байт. Эти два адреса должны быть написаны в одном пакете инструкций одновременно.
Таблица 2.2 Таблица управления серводвигателем Dynamixel 2.3.3 Управление портами Ниже приведен простейший пример программы управления портами. В данном случае идет управление портом C. После успешной компиляции проекта и загрузки полученного.hex файла при выполнении программы на микроконтроллере загорятся все светодиоды.
#include #include int main(void) DDRC = 0x7F;
PORTC = 0x7E;
while (1)