sonyps4.ru

Трик, кибернетический конструктор нового поколения. Знакомство с робототехническим конструктором трик: обратный маятник

Что общего между женской грудью и игрушечной железной дорогой? Правильно, и то, и то предназначено для детей, а играют с ними папы. Несколько дней назад я обзавёлся роботехническим конструктором ТРИК . Комплект довольно суровый, разработчики утверждают, что он хорош для быстрого прототипирования и для обучения, а именно (само-)обучение меня в данный момент и интересует.

Что сейчас широко доступно на рынке для робототехнических игр? Самодельное изготовление плат под каждый проект не рассматриваем. Лего, распи, ардуино. Лего прекрасен, но, к сожалению, очень и очень сильно ограничен. Распи и ардуины неплохо расширяются, но довольно неудобны и быстро превращаются в рассыпуху разных карточек-шильдиков-макеток. Вот тут и выходят на рынок питерские ребята со своим конструктором ТРИК.

Итак, моя задача понять, насколько это доступно широкой публике (мне). Я никогда не посещал лекций ни по теоретической кибернетике, ни по теории управления. Закон Ома я выучил ровно настолько, чтобы понять, что розетку лизать не стоит, и паяльник не является моим другом. Но как всякий нормальный (великовозрастный) ребёнок играть я люблю, и поэтому заинтересовался этой темой.

Я получил вот такой набор:

Вообще цена их наборов варьируется от примерно двадцати до семидесяти тысяч рублей. Дороже ли это, чем лего? Нет. Месяц назад я купил Lego EV3. Цена вопроса 370€ базовый набор + 100€ аккумулятор (они там совсем офигели?!) И это ещё я не считал зарядника за тридцать евро. Плюс ко всему в базовый набор не входят ни сонар (+35€), ни гироскоп (+35€). А уж про камеру с микрофоном и вообще можно забыть, не упоминая вообще в принципе отустствия доступа внутрь леговского линукса.

В мой набор (он и разложен на предыдущей фотографии) входят два контроллера , две камеры, два микрофона, сонары, два типа инфракрасных датчиков, кнопки, шесть электродвигателей с оптоэнкодерами, три сервы, два механических захвата, куча колёс, в том числе голономных, зарядки-аккумуляторы-шнурки, зубчатые колёса, рейки и куча металлических пластин и уголков (привет детство!). Конструктор чисто для начала, вообще к контроллеру можно подключить практически всё, на что хватит воображения. Центральный процессор ARM9, под видео отдельный процессор, чтобы не грузить центральный. Программировать можно на чём угодно от ассемблера до C#, вам дают рутовую консоль, плюс весь код прошивки опенсорсный.

Вот так выглядит моя чудо-коробка:

В качестве самого первого проекта я решил собрать обратный маятник, он и представлен на заглавной картинке. Вот так он выглядит сзади:

Из набора мне понадобилось два двигателя, два колеса, чуть крепежа и непосредственно контроллер с батареей. Моей целью не было скопировать туториал из обучающего курса ТРИК, мне интересно обломать зубы обо все проблемы самостоятельно, поэтому я буду изобретать велосипед.

Итак, в моём распоряжении одна степень свободы, акселерометр и гироскоп, энкодеры от двигателей я не использовал. Писать буду на Qt Script.

Чтение датчиков

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

Гироскоп

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

Вот мой код работы с гироскопом, здесь while(true) - основной цикл программы.
var gyr_x_angle = 0; var lasttime = Date.now(); while (true) { var G = brick.gyroscope().read(); G = G + 69; // drift correction var curtime = Date.now(); var dt = (curtime - lasttime)/1000.0; lasttime = curtime; gyr_x_rate = G * 0.07; gyr_x_angle = gyr_x_angle + gyr_x_rate * dt; }

В массив G я читаю значения датчика, в следующей строчке произвожу коррекцию интересующей меня оси. Выясняется, что мой конкретно датчик в полном покое показывает в среднем скорость в 69 единиц, поэтому я их вычитаю, чтобы получить интересующую меня скорость.
Датчик выдаёт целое число, которое нужно перевести в углы. В штатном режиме он работает на 2000 градусов/сек (dps). Даташит говорит, что этому соответствует константа в 70mdps/digit. Таким образом, G(digits) * 0.07 (dps/digit) даёт нам угловую скорость. Осталось её проинтегрировать, умножив на время измерения dt.

Акселерометр

Из акселерометра угол получить ещё проще, однако проблема в том, что уж больно он шумный, а уж когда тележка начинаёт дёргаться туда-сюда, вообще туши свет. Вот так выглядит код:
[...] while (true) { [...] var A = brick.accelerometer().read(); var a_x_angle = Math.atan(A / A) * 180.0 / pi; }

Гасим шум: совмещение показаний акселерометра и гироскопа

[...] var CF_x_angle = 0; while (true) { [...] CF_x_angle = 0.98*(CF_x_angle+ gyr_x_rate*dt) + 0.02*a_x_angle; }
Это просто говорит, что значение текущего угла это на 98% значение предыдущего угла с поправкой от гироскопа, а на 2% - это прямое чтение угла от акселерометра. Такое совмещение позволяет бороться с уплыванием гироскопа, обратите внимание, что переменную gyr_x_angle мы тут вообще не использовали.

ПИД-регулятор

Как я уже говорил, я не посещал умных лекций по теории управления, поэтому LQR-регуляторы мне не по зубам за разумное (пара часов) время. А вот ПИД вполне подойдёт.

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

Скорость вращения колеса, которую нам выдаст ПИД, состоит из трёх (взвешенных) слагаемых: пропорциональной, интегирующей и дифференцирующей. Пропорциональная просто равна углу отклонения от вертикали, интегрирующая - это сумма всех ошибок регулирования, а дифференцирующая пропорциональна скорости изменения отклонения от вертикали.

Звучит это страшно, а на деле код крайне простой:

полный код программы

var gyr_x_angle = 0; var lasttime = Date.now(); var CF_x_angle = 0; var iTerm = 0; var CF_x_angle_prev = 0; var KP = 0; var KI = 0; var KD = 0; while (true) { var G = brick.gyroscope().read(); G = G + 69; // drift correction var curtime = Date.now(); var dt = (curtime - lasttime)/1000.0; lasttime = curtime; gyr_x_rate = G * 0.07; var A = brick.accelerometer().read(); var a_x_angle = Math.atan(A / A) * 180.0 / pi; CF_x_angle = 0.98*(CF_x_angle+ gyr_x_rate*dt) + 0.02*a_x_angle; // крутим колёса! var pTerm = KP*CF_x_angle; // пропорциональная составляющая iTerm = iTerm + KI*CF_x_angle; // интегирующая составляющая var dTerm = KD * (CF_x_angle - CF_x_angle_prev); // дифференциальная составляющая CF_x_angle_prev = CF_x_angle; power = pTerm + iTerm + dTerm; brick.motor(M3).setPower(power); brick.motor(M4).setPower(power); }

Выбор констант KP, KI, KD

Осталась самая сложная часть: найти значения весов в сумме, к сожалению, это можно только делать эмпирически.

Для начала найдём коэффициент KP. Положим KI и KD равными нулю и увеличиваем KP начиная с нуля до того момента, когда наша тележка начнёт совершать (примерно) постоянные колебания, примерно вот так (KP=8, KI=0, KD=0):

Очевидно, что это перебор, тележка получает слишком сильный сигнал от пропорциональной составляющей, поэтому уменьшим её примерно вполовину, получим вот это (KP=5, KI=0, KD=0):

Теперь тележке не хватает чисто пропорционального сигнала, увеличим её скорость, добавив интегрирующей компоненты. Плавно увеличиваем KI с нуля, пытаясь достигнуть момента, когда снова получим колебания тележки вокруг желаемого положения (KP=5, KI=0.5, KD=0):

Теперь добавляем дифференцирующую компоненту, которая будет играть роль демпфера, гася колебания, вот что у меня получается (KP=5, KI=0.5, KD=5):

Заключение

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

Ни электротехнического, ни кибернетического бэкграунда у меня нет, то есть, это вполне доступно рядовым пользователям, что, собственно, мне и очень интересно. Буду продолжать изучение!

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

Обновление: технические характеристики контроллера

Многие не понимают, чем отличается триковский контроллер от ардуино или от леговских коробок. Поэтому вот табличка:
Центральный процессор (ЦП) OMAP-L138 C6-Integra™ DSP+ARM® SoC, Texas Instruments
Тактовая частота ЦП 375 МГц
Процессорное ядро ЦП ARM926EJ-S™ RISC MPU
DSP-ядро ЦП C674x Fixed/Floating-Point VLIW DSP
Оперативная память 256 МБайт
FLASH - память 16 МБайт
Периферийный процессор (ПП) MSP430F5510, Texas Instruments
Тактовая частота ПП 24 МГц
Интерфейсы пользователя USB 2.0, WiFi b/g/n, BlueTooth, 2*UART, 2*I2C, Micro-SD, Mic in (stereo), Line out (mono)
Интерфейсы двигателей постоянного тока 4 порта двигателей 6-12V DC, с индивидуальной аппаратной защитой от перегрузки по току (до 2А на двигатель)
Интерфейсы периферийных устройств 19 сигнальных портов общего назначения (6 одноканальных и 13 двухканальных) с питанием 3.3-5V, из них 6 могут работать в режиме аналогового входа
Интерфейсы видео сенсоров 2 входа BT.656 VGA 640*480, поддержка режима стерео
Встроенный LCD монитор 2.4” TFT, цветной, сенсорный, разрешение 320*240 пикселей
Встроенный динамик Номинальная мощность 1W, пиковая 3W
Светодиодный индикатор 2-цветный, программно-управляемый
Слоты расширения 2 * 26-контактных «щелевых» разъема модулей расширения
Дополнительное оборудование (входит в состав контроллера) 3-х осевой акселерометр, 3-х осевой гироскоп, аудиокодек, усилитель, конвертеры и схемы управления питанием, схемы защиты входов от перегрузок по напряжению и току
Электропитание 6-12V DC, внешний сетевой адаптер либо LiPo аккумулятор RC 3P (11,1V) / 2P (7,4V)
Габариты корпуса 125 * 80 * 25 мм

В феврале были объявлены результаты конкурса инновационных образовательных программ среди школ Санкт-Петербурга. Одним из победителей стал Лицей № 419 с проектом «Инженерная МетаЛаборатория». На его реализацию будет выделено 2 млн. рублей. В этой новости нас в первую очередь привлекла технологическая база проекта — конструктор ТРИК. Обсуждаем суть проекта и роль ТРИКа в нем с Михаилом Киселевым – педагогом лицея и одним из авторов программы.

Динара Гагарина: Михаил Михайлович, во-первых, поздравляю с победой в конкурсе, это оказалось для вас неожиданным? Или вы были уверены в победе?

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

Можете в двух предложениях описать суть проекта? Самое-самое главное, что позволит выйти на новый уровень?

Сегодня многие говорят о необходимости инженерного образования, о связи робототехники со многими школьными дисциплинами. В реалиях же существуют разрозненные программы, решающие свои собственные задачи, не принимая во внимание, что конечная цель одна и та же. Мы попытались создать такие условия, чтобы предметы Информатика , Технология , Физика , Химия , Программирование , Проектная деятельность действительно имели общие точки пересечения, а дополнительное образование и внеурочная деятельность дополняли урочную деятельность. Мне кажется, у нас получилось.

Провокационный вопрос. Школе нужны инновации? Или все новое – хорошо забытое (или хорошо реализованное) старое?

Использование инноваций стимулирует получение новых знаний, правда не надо забывать, что все новое должно ложиться на прочный базовый фундамент. В хорошо забытом старом тоже можно найти много интересного, например, для своих занятий в кружке я очень внимательно изучил подшивки журналов, таких, как «Техника молодежи», с 30-х годов, многие идеи актуальны и сегодня, особенно, если добавить современную электронику.

Теперь давайте разбираться в деталях «Инженерной МетаЛаборатории». Если я правильно поняла, одна из составляющих – включение робототехники со второго класса через уроки информатики и технологии?

Инженерная МетаЛаборатория (ИМЛ) — проект не совсем робототехнический. Контроллеры, датчики, алгоритмы управления используются в нем как инструмент для реализации конечного продукта (проекта). Это своеобразный ресурсный центр, где по аналогии с ресурсными центрами Санкт-Петербургского университета собрана материально-техническая база и методические разработки для использования в учебном процессе по многим предметам и внеурочной деятельности.

Можете привести примеры таких разработок?

Один из проектов — «Палеонтологический туризм». Сначала дети изучают жизнь вымерших животных и растений, затем едут на карьер, находящийся недалеко от нашего лицея, находят там окаменелости, которые препарируются в лаборатории ручным инструментом, далее идет подготовка презентации или выставки.

Еще пример — проект «Выбираем наушники». Теоретическую часть учащиеся готовят с учителями-предметниками, а работа со звуком и обработка данных ведется в лаборатории. Обучение детей работе со сложными механизмами и устройствами — одна из задач ИМЛ.

Следующий пример — разработка олимпиадных задач по программированию (C, C++, Pascal, Java, C#), в которой могут участвовать школьники, даже не знакомые с основами робототехники, а проверка заданий осуществляется на реальных роботах.

Контроллеры и датчики тоже требуют изучения. Нами были разработаны стенды: электротехнический, пожарной и охранной сигнализации, медицинский, гидро- и аэропоники, отопительных систем. Основная особенность стендов — это то, что они собираются только из тех составных частей и материалов, которые используются в повседневной жизни (электрореле, розетки, помпы, бойлеры и др.). Девиз лаборатории: «Изучение — Управление — Совершенствование». На этапе сборки стенда дети знакомятся с устройством и свойствами элементов, которые их окружают. Следующий шаг — управление. Оказывается, используя контроллер ТРИК, можно этими элементами управлять. Поэтому для моих учеников не секрет, что такое «умный дом» или «интернет вещей». Совершенствование же — самостоятельный творческий процесс.

Инженерное наполнение проектной деятельности в рамках предмета Технология мотивирует учеников на самостоятельные исследования, поскольку нет ограничений в работе как по тематике проектов, так и с используемыми материалами. Надо отметить, что такое содержание предмета Технология полностью соответствует требованиям образовательных стандартов, что для нас очень важно, поскольку лицей №419 является городской экспериментальной площадкой по внедрению ФГОС ООО*.

Программная среда TRIK Studio очень удачно вписывается в программы Информатики и Программирования . Разработанные лабораторные работы можно использовать на предметах Физика , Химия , Биология . Не добрались пока только до Литературы и Русского языка , но это вопрос времени.

Спортивная робототехника в полном объеме присутствует в дополнительном образовании как соревновательная, так и творческая.

Вот, как-то так, очень хотелось объяснить, что ИМЛ — это не помещение, насыщенное оборудованием, а цельная структура, включающая педагогов, учеников, родителей, подкрепленная нормативными документами и обеспеченная материально.

Проекту еще предстоит пройти этапы внедрения и апробации, доработать УМК.

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

А сейчас в программе вашего лицея есть робототехника? В каком объеме и статусе?

Да, конечно, два раза в неделю работает кружок «Конструирование и программирование механизмов и роботов». Изучение элементов робототехники включено в программы предметов Информатика (16 часов) и Технология (32 часа), и, конечно же, в проектах на урочной и внеурочной деятельности очень часто используются технические возможности робототехники.

Что еще кроме ТРИКа вы планируете использовать? Поясню свой вопрос. Вы начинаете внедрять ТРИК во втором классе (кстати, не слишком ли рано в этом возрасте?), наверное, через определенное время конструктор детям надоест и захочется чего-то нового. Как планируете решать эту проблему?

Многие преподаватели в своей деятельности используют только те наборы, которые были закуплены, даже на соревнованиях различного уровня существует понятие образовательный конструктор и ограничение на использование контроллеров, отличных от рекомендуемых спонсорами соревнований. По моему мнению, детей нельзя ограничивать ни в выборе материалов, ни в выборе электронных комплектующих, то есть не надо «загонять их в коробочку». На занятиях мы используем контроллеры, а материал из которого будут творить дети, подбирается в зависимости от поставленной задачи. Например, на прошлогоднем открытом первенстве Санкт-Петербурга по робототехнике мы показали модели, у которых база и колеса были сделаны из пеноплэкса, кстати, первые места они выиграли. Эти модели появились, когда мы поняли, что металлические детали слишком тяжелые для моторов из набора ТРИК. Напомню, что для ИМЛ робототехнические наборы являются инструментом для решения задач. Надоест или не надоест детям зависит только от поставленных задач, а это уже работа педагога, то же самое касается и возраста обучаемых.

Еще один провокационный вопрос. Почему ТРИК, а не любимое всеми ЛЕГО? Импортозамещение?

Вопрос действительно провокационный. Если сравнивать различные контроллеры, то у каждого найдутся свои плюсы и минусы. Мы свой выбор основывали на следующих критериях. Во-первых, очень широкий диапазон решаемых задач, во-вторых, мобильность платформы, в-третьих, конечный продукт проектной деятельности должен быть максимально приближен к реальной жизни. Из косвенных причин – отсутствие специального помещения, где бы можно было паять, а также среда программирования TRIK Studio, на мой взгляд, лучший продукт в своем сегменте, к тому же бесплатный, с хорошей техподдержкой. Огромное спасибо разработчикам.

Насколько вообще принципиален выбор той или иной платформы? Есть ли разница, на чем учить?

На чем учить — разницы действительно нет, но если брать целиком весь комплекс, то приходится подбирать наиболее универсальное решение. В этом вопросе у каждого свое видение. Мы пошли по пути ТРИК и TRIK Studio.

Интересна методическая составляющая вашего проекта. У ТРИКа разработаны и выложены на сайте некоторые методические разработки, вы исходили из них или составляли полностью уникальный продукт? Насколько вашу методику можно масштабировать для внедрения в других школах? Будут ли опубликованы ваши методические пособия?

Нехорошо считать чужие деньги, но все же 2 млн – большая для образования сумма. Приоткройте смету. Сколько конструкторов необходимо для реализации программы, подобной вашей? И сколько педагогов необходимо переобучить?

Секрета в этом тоже никакого нет. Одно из требований к участникам конкурса — составление сметы на реализацию проекта. При составлении сметы мы исходили из того, что на каждой парте в классе должен быть контроллер, а поскольку на уроках технологии класс делится пополам, получилось 8 учебных пар, то есть 16 контроллеров, которые потом задействуются во внеурочной деятельности и на кружке. Далее, оснащение стендов (10 стендов, 4 тематики). Мобильный класс и самые необходимые инструменты. На этом деньги закончились. Были заявлены еще квадрокоптеры, но прошло время, цены изменились, наверное, от них придется отказаться, не влезут в смету. Получается, что для школы деньги действительно огромные, а купить на них можно не очень много чего. Что касается преподавателей – скорее не их переучивать, а разрабатывать методические материалы для учителей. Робототехника, на самом деле, очень близка ко многим школьным предметам.

Робототехника и ИТ вообще развивается столь стремительно, что всегда есть немалый риск устареть еще до внедрения разработок. Ваш проект, насколько я понимаю, долгосрочный. Не боитесь утратить актуальность?

Что общего между женской грудью и игрушечной железной дорогой? Правильно, и то, и то предназначено для детей, а играют с ними папы. Несколько дней назад я обзавёлся роботехническим конструктором ТРИК . Комплект довольно суровый, разработчики утверждают, что он хорош для быстрого прототипирования и для обучения, а именно (само-)обучение меня в данный момент и интересует.

Что сейчас широко доступно на рынке для робототехнических игр? Самодельное изготовление плат под каждый проект не рассматриваем. Лего, распи, ардуино. Лего прекрасен, но, к сожалению, очень и очень сильно ограничен. Распи и ардуины неплохо расширяются, но довольно неудобны и быстро превращаются в рассыпуху разных карточек-шильдиков-макеток. Вот тут и выходят на рынок питерские ребята со своим конструктором ТРИК.

Итак, моя задача понять, насколько это доступно широкой публике (мне). Я никогда не посещал лекций ни по теоретической кибернетике, ни по теории управления. Закон Ома я выучил ровно настолько, чтобы понять, что розетку лизать не стоит, и паяльник не является моим другом. Но как всякий нормальный (великовозрастный) ребёнок играть я люблю, и поэтому заинтересовался этой темой.

Я получил вот такой набор:

Вообще цена их наборов варьируется от примерно двадцати до семидесяти тысяч рублей. Дороже ли это, чем лего? Нет. Месяц назад я купил Lego EV3. Цена вопроса 370€ базовый набор + 100€ аккумулятор (они там совсем офигели?!) И это ещё я не считал зарядника за тридцать евро. Плюс ко всему в базовый набор не входят ни сонар (+35€), ни гироскоп (+35€). А уж про камеру с микрофоном и вообще можно забыть, не упоминая вообще в принципе отустствия доступа внутрь леговского линукса.

В мой набор (он и разложен на предыдущей фотографии) входят два контроллера , две камеры, два микрофона, сонары, два типа инфракрасных датчиков, кнопки, шесть электродвигателей с оптоэнкодерами, три сервы, два механических захвата, куча колёс, в том числе голономных, зарядки-аккумуляторы-шнурки, зубчатые колёса, рейки и куча металлических пластин и уголков (привет детство!). Конструктор чисто для начала, вообще к контроллеру можно подключить практически всё, на что хватит воображения. Центральный процессор ARM9, под видео отдельный процессор, чтобы не грузить центральный. Программировать можно на чём угодно от ассемблера до C#, вам дают рутовую консоль, плюс весь код прошивки опенсорсный.

Вот так выглядит моя чудо-коробка:

В качестве самого первого проекта я решил собрать обратный маятник, он и представлен на заглавной картинке. Вот так он выглядит сзади:

Из набора мне понадобилось два двигателя, два колеса, чуть крепежа и непосредственно контроллер с батареей. Моей целью не было скопировать туториал из обучающего курса ТРИК, мне интересно обломать зубы обо все проблемы самостоятельно, поэтому я буду изобретать велосипед.

Итак, в моём распоряжении одна степень свободы, акселерометр и гироскоп, энкодеры от двигателей я не использовал. Писать буду на Qt Script.

Чтение датчиков

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

Гироскоп

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

Вот мой код работы с гироскопом, здесь while(true) - основной цикл программы.
var gyr_x_angle = 0; var lasttime = Date.now(); while (true) { var G = brick.gyroscope().read(); G = G + 69; // drift correction var curtime = Date.now(); var dt = (curtime - lasttime)/1000.0; lasttime = curtime; gyr_x_rate = G * 0.07; gyr_x_angle = gyr_x_angle + gyr_x_rate * dt; }

В массив G я читаю значения датчика, в следующей строчке произвожу коррекцию интересующей меня оси. Выясняется, что мой конкретно датчик в полном покое показывает в среднем скорость в 69 единиц, поэтому я их вычитаю, чтобы получить интересующую меня скорость.
Датчик выдаёт целое число, которое нужно перевести в углы. В штатном режиме он работает на 2000 градусов/сек (dps). Даташит говорит, что этому соответствует константа в 70mdps/digit. Таким образом, G(digits) * 0.07 (dps/digit) даёт нам угловую скорость. Осталось её проинтегрировать, умножив на время измерения dt.

Акселерометр

Из акселерометра угол получить ещё проще, однако проблема в том, что уж больно он шумный, а уж когда тележка начинаёт дёргаться туда-сюда, вообще туши свет. Вот так выглядит код:
[...] while (true) { [...] var A = brick.accelerometer().read(); var a_x_angle = Math.atan(A / A) * 180.0 / pi; }

Гасим шум: совмещение показаний акселерометра и гироскопа

[...] var CF_x_angle = 0; while (true) { [...] CF_x_angle = 0.98*(CF_x_angle+ gyr_x_rate*dt) + 0.02*a_x_angle; }
Это просто говорит, что значение текущего угла это на 98% значение предыдущего угла с поправкой от гироскопа, а на 2% - это прямое чтение угла от акселерометра. Такое совмещение позволяет бороться с уплыванием гироскопа, обратите внимание, что переменную gyr_x_angle мы тут вообще не использовали.

ПИД-регулятор

Как я уже говорил, я не посещал умных лекций по теории управления, поэтому LQR-регуляторы мне не по зубам за разумное (пара часов) время. А вот ПИД вполне подойдёт.

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

Скорость вращения колеса, которую нам выдаст ПИД, состоит из трёх (взвешенных) слагаемых: пропорциональной, интегирующей и дифференцирующей. Пропорциональная просто равна углу отклонения от вертикали, интегрирующая - это сумма всех ошибок регулирования, а дифференцирующая пропорциональна скорости изменения отклонения от вертикали.

Звучит это страшно, а на деле код крайне простой:

полный код программы

var gyr_x_angle = 0; var lasttime = Date.now(); var CF_x_angle = 0; var iTerm = 0; var CF_x_angle_prev = 0; var KP = 0; var KI = 0; var KD = 0; while (true) { var G = brick.gyroscope().read(); G = G + 69; // drift correction var curtime = Date.now(); var dt = (curtime - lasttime)/1000.0; lasttime = curtime; gyr_x_rate = G * 0.07; var A = brick.accelerometer().read(); var a_x_angle = Math.atan(A / A) * 180.0 / pi; CF_x_angle = 0.98*(CF_x_angle+ gyr_x_rate*dt) + 0.02*a_x_angle; // крутим колёса! var pTerm = KP*CF_x_angle; // пропорциональная составляющая iTerm = iTerm + KI*CF_x_angle; // интегирующая составляющая var dTerm = KD * (CF_x_angle - CF_x_angle_prev); // дифференциальная составляющая CF_x_angle_prev = CF_x_angle; power = pTerm + iTerm + dTerm; brick.motor(M3).setPower(power); brick.motor(M4).setPower(power); }

Выбор констант KP, KI, KD

Осталась самая сложная часть: найти значения весов в сумме, к сожалению, это можно только делать эмпирически.

Для начала найдём коэффициент KP. Положим KI и KD равными нулю и увеличиваем KP начиная с нуля до того момента, когда наша тележка начнёт совершать (примерно) постоянные колебания, примерно вот так (KP=8, KI=0, KD=0):

Очевидно, что это перебор, тележка получает слишком сильный сигнал от пропорциональной составляющей, поэтому уменьшим её примерно вполовину, получим вот это (KP=5, KI=0, KD=0):

Теперь тележке не хватает чисто пропорционального сигнала, увеличим её скорость, добавив интегрирующей компоненты. Плавно увеличиваем KI с нуля, пытаясь достигнуть момента, когда снова получим колебания тележки вокруг желаемого положения (KP=5, KI=0.5, KD=0):

Теперь добавляем дифференцирующую компоненту, которая будет играть роль демпфера, гася колебания, вот что у меня получается (KP=5, KI=0.5, KD=5):

Заключение

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

Ни электротехнического, ни кибернетического бэкграунда у меня нет, то есть, это вполне доступно рядовым пользователям, что, собственно, мне и очень интересно. Буду продолжать изучение!

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

Обновление: технические характеристики контроллера

Многие не понимают, чем отличается триковский контроллер от ардуино или от леговских коробок. Поэтому вот табличка:
Центральный процессор (ЦП) OMAP-L138 C6-Integra™ DSP+ARM® SoC, Texas Instruments
Тактовая частота ЦП 375 МГц
Процессорное ядро ЦП ARM926EJ-S™ RISC MPU
DSP-ядро ЦП C674x Fixed/Floating-Point VLIW DSP
Оперативная память 256 МБайт
FLASH - память 16 МБайт
Периферийный процессор (ПП) MSP430F5510, Texas Instruments
Тактовая частота ПП 24 МГц
Интерфейсы пользователя USB 2.0, WiFi b/g/n, BlueTooth, 2*UART, 2*I2C, Micro-SD, Mic in (stereo), Line out (mono)
Интерфейсы двигателей постоянного тока 4 порта двигателей 6-12V DC, с индивидуальной аппаратной защитой от перегрузки по току (до 2А на двигатель)
Интерфейсы периферийных устройств 19 сигнальных портов общего назначения (6 одноканальных и 13 двухканальных) с питанием 3.3-5V, из них 6 могут работать в режиме аналогового входа
Интерфейсы видео сенсоров 2 входа BT.656 VGA 640*480, поддержка режима стерео
Встроенный LCD монитор 2.4” TFT, цветной, сенсорный, разрешение 320*240 пикселей
Встроенный динамик Номинальная мощность 1W, пиковая 3W
Светодиодный индикатор 2-цветный, программно-управляемый
Слоты расширения 2 * 26-контактных «щелевых» разъема модулей расширения
Дополнительное оборудование (входит в состав контроллера) 3-х осевой акселерометр, 3-х осевой гироскоп, аудиокодек, усилитель, конвертеры и схемы управления питанием, схемы защиты входов от перегрузок по напряжению и току
Электропитание 6-12V DC, внешний сетевой адаптер либо LiPo аккумулятор RC 3P (11,1V) / 2P (7,4V)
Габариты корпуса 125 * 80 * 25 мм

ТРИК, кибернетический конструктор нового поколения

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

Конструктор ТРИК это не просто забавная игрушка, а прекрасный набор прототипирования робототехнических моделей: крепкий "скелет", базовые приводы, необходимые сенсоры.

Металлические детали ТРИК совместимы с "совметалконструктором", то есть перфорация под M4 c шагом 10мм. Мы не ставили себе целью изобрести новый металлический конструктор, а лишь добавили необходимое. Принципиальное отличие от обычных конструкторов в следующем.

  • Крепкий металл. Детали изготавливаются толщиной 0,75мм, 0,8мм, 1,0мм.
  • Жесткий профиль. Балки П-образного профиля.
  • Удобно собирать. Предусмотрены переходники (адаптеры) для крепления типовых моторов, сервомоторов и т.д.

Контроллер ТРИК позволяет легко создавать современных роботов, способных даже “видеть” и “слышать”. На его основе сделан конструктор ТРИК для использования в школах и вузах. Среда визуального программирования TRIKStudio позволяет составлять программы роботов из картинок с готовыми алгоритмами. Простота и удобство делают конструктор интересной игрушкой для широкого потребителя, желающего создать собственного робота или радиоуправляемую модель. Наш контроллер уже готов, есть разнообразные демо-модели. Есть предзаказы школ и университетов, живой интерес иностранных партнёров.

Конструктор продаётся в разных наборах: от простого до о-о-очень большого. На фото выше показаны примеры деталей, входящих в комплект. Также все наборы обязательно содержат контроллер ТРИК , видеокамеру и микрофон. (А как же иначе!)

Контроллер

Контроллер ТРИК сочетает в себе мощь современной электроники и надёжность проверенных решений. Он разработан командой опытных инженеров специально для робототехники. ТРИК способен одновременно решать задачи обработки аудио- и видеоданных, синтеза речи, навигации; управлять сервоприводами и моторами; собирать показания с аналоговых и цифровых датчиков; обмениваться информацией по беспроводной связи.

Контроллер совместим с широким спектром периферийных устройств, имеет в своем составе все необходимое оборудование для управления двигателями постоянного тока и сервоприводами, а также для приема и обработки информации от цифровых и аналоговых датчиков, микрофонов, видеомодулей. Контроллер снабжён цветным сенсорным дисплеем, программируемыми кнопками, есть поддержка WiFi, Bluetooth 4.0 (включая LE) и ANT. В контроллере установлены встроенные защиты от перегрузки по току и от глубокой разрядки аккумулятора.

На центральном ARM-процессоре контроллера ТРИК работает Linux, моторы и датчики программно доступны даже из shell скриптов. Поэтому автономные модели можно программировать не только на С или С++/Qt, но и на JavaScript, С#/F# (.NET), Python и Java. А для начинающих программистов без большого опыта есть среда визуального программирования

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

Особенности кибернетического конструктора ТРИК

  • Модель подходит как для развлечения, так и для комплексного образовательного процесса, в ходе которого ребенок обучается работать в команде, понимать инструкции и графические схемы;
  • Конструктор помогает расширить творческое и пространственное мышление, логику и математические способности;
  • Модель изготовлена из прочного и износоустойчивого металла;
  • В комплект входят LED-лента, инфракрасные датчики, сервоприводы и специальные сенсоры, что позволит собрать уникальные модели киборгов, способных передвигаться, обходить препятствия, достигать поставленной цели и даже фиксировать изображение;
  • Конструктор рассчитан для пользования двумя учениками.

Функциональные возможности кибернетического конструктора ТРИК

Помощь в развитии ребенка можно оказывать с ранних лет, применив при этом интерактивные игрушки. Модели полезны, поскольку помогают выявить расположенность детей к каким-либо точным наукам или расширить уже сложившийся кругозор. К числу «умных» девайсов относят кибернетический конструктор торговой марки ТРИК, который интересен своим дизайном и функциональностью. Изделие изготовлено из металла, что говорит о прочности и износоустойчивости модели. Конструктор помогает развить пространственное мышление, логику и фантазию.

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

Структурные элементы изготовлены из металла толщиной 0,75мм, 0,8мм, 1,0мм, что свидетельствует о надежности и прочности собранных моделей. Для комплексного творческого процесса в комплект поставки входят адаптеры, участвующие в соединении типовых сервоприводов и моторов. Более того, пользователь сможет освоить особенности применения LED-ленты, камеры, инфракрасных сенсоров и других деталей. Важным дополнением служат датчики касания, расстояния и распознавания объектов. Для любителей техники и моделей, умеющих передвигаться, в комплект входят колеса различного диаметра, шестеренки, червячная пара, реечные передачи и омниколесо. Особенность конструктора в том, что все элементы совместимы с другими сериями металлических роботов, включая адаптеры для крепления токопроводящих приводов.


В комплект входит мощный аккумулятор (4200mAh) и специальное зарядное устройство, что свидетельствует о возможности сборки автономно работающих роботов. Отметим, что все токопроводящие элементы надежно скрыты от прямого воздействия на них. Конструктор рекомендован к применению детям в возрасте от 12 лет. Модель подходит для развлечения и обучения как мальчиков, так и девочек. Для комплексной сборки роботов требуется присутствие взрослых, если дети не попадают в возрастные рамки. Комплект содержит мелкие элементы.

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

Для кого следует купить кибернетический конструктор ТРИК

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



Загрузка...