Роботостроение. Ищу математика.
Требуется помощь математика в одном интересном проекте. Я его уже давно пилю в свободное от работы время и вот сейчас уперся в некоторые математические проблемы, которые меня здорово тормозят.
Да, проект имеет некоторое отношение к пони.
Если вы знаете про аппроксимацию полиномами, имеете представление о машинном обучении (нейросети и т.д.), а также можете в MatLab – добро пожаловать под кат.
Ну или если хотите узнать зачем нужен весь этот матан – тоже под кат.
Если вкратце, то это пневматическая мышца. Известны они уже давно, имеют свои достоинства и недостатки, но широкого распространения в робототехники не получили в силу ряда причин, уступив электрическому приводу.
Однако, для моих целей пневмомышца — идеальный движитель, нужно только сделать нормальную систему управления. Именно над этим я сейчас и работаю.
Итак, на текущий момент у меня есть
Описание системы в картинкахПневматическая мышца
Датчик давления.
Датчик нагрузки (тензодатчик и АЦП с инструментальным усилителем)
Цифровой штангенциркуль измеряет изменение длинны мышцы.
Китайские пневмоклапаны.
Управляется это все микроконтроллером CortexM3 stm23f100 подключенным к макетной плате.
Микроконтроллер получает команды от компьютера и отправляет данные через COM-порт.
Управляющие цепи запитаны от компьютерного блока питания
Ну и графический интерфейс я написал на C# в Visual Studio. Библиотека для построения графиков написана в MatLab.
И все это работает.
Там, где графики нагрузки, вы можете видеть, что у сигнала большой уровень шума. Я уже позже поковырялся в АЦП и теперь шум значительно ниже. Когда все компоненты будут запаяны на нормальную плату с нормальным источником питания, шум станет еще меньше.
Текущая конфигурация позволяет погонять мышцу под различной нагрузкой и собрать данные для системы управления. Выглядит это как-то примерно так:
Что тут происходит. На мышцу подается случайная последовательность команд. При этом я постепенно увеличивал нагрузку с шагом 1,25 кг.
Примерно на 50 кг сигнал с тензодатчика вышел из диапазона АЦП (коэф.усиления=128) и дальше я, уже из чистого любопытства, просто понавешивал все блины которые у меня были. Максимальный вес=65 кг и это, судя по всему, не предел.
В эксперименте участвовали эти черные ребята весом 20, 5 и 1,25 кг.
И теперь у меня есть 10К матлабовских точек. Что с ними можно делать?
Ну для начала длинна. В будущем проекте я хотел бы отказаться от непосредственного измерения длинны каждой мышцы, уж очень это громоздко и накладно.
Известно, что длинна пневмомышцы – это функция от давления и нагрузки.
Вот собственно одна из задач – найти эту самую зависимость и посмотреть можно ли вычислить длину, зная давление и нагрузку. А если можно, то с какой погрешностью. Для этих целей существует функция polifitX, которая аппроксимирует функцию полиномом заданного порядка. Я сейчас разбираюсь с ней, но если у кого уже есть опыт работы с подобными функциями в MatLab, то я буду благодарен за помощь.
Дальше больше. Клапаны управляются ШИМ и открываются с заданной скважностью 10 раз в секунду. Назовем эту скважность мощностью (в собранных данных этот параметр есть для каждой точки). Так вот, для нормального управления нужно, зная давление и нагрузку, а также требуемое изменение длинны за требуемое время (скорость), вычислить на какое время и с какой мощностью требуется открыть клапан.
Эта задача уже в разы сложнее. У меня есть пара идей и я все больше посматриваю в сторону нейросетей. Кстати, те данные, что я собрал отлично подходят на роль выборки для обучения.
В данный момент я как-раз пытаюсь раскурить нейросети, там много интересного, но область для меня новая и дело идет не очень быстро.
Если кто поможет – добро пожаловать в команду.
P.S. если тема вас заинтересовала и вы хотели бы поработать вместе со мной, то дайте знать. Проект конечно не коммерческий и денег на нем не заработать, но что-нибудь интересное в итоге точно получится.
Требуются Собственно, математик.
Электронщик (паять LQFP при моем зрении это адский ад). Москва и область.
Программист С++ для работы с STM32.
Программист C# для работы с управляющей программой. (начитался про Agile и давно хочу попробовать парную работу)
Инженер-механик.
Да, проект имеет некоторое отношение к пони.
Если вы знаете про аппроксимацию полиномами, имеете представление о машинном обучении (нейросети и т.д.), а также можете в MatLab – добро пожаловать под кат.
Ну или если хотите узнать зачем нужен весь этот матан – тоже под кат.
Если вкратце, то это пневматическая мышца. Известны они уже давно, имеют свои достоинства и недостатки, но широкого распространения в робототехники не получили в силу ряда причин, уступив электрическому приводу.
Однако, для моих целей пневмомышца — идеальный движитель, нужно только сделать нормальную систему управления. Именно над этим я сейчас и работаю.
Итак, на текущий момент у меня есть
Описание системы в картинкахПневматическая мышца
Датчик давления.
Датчик нагрузки (тензодатчик и АЦП с инструментальным усилителем)
Цифровой штангенциркуль измеряет изменение длинны мышцы.
Китайские пневмоклапаны.
Управляется это все микроконтроллером CortexM3 stm23f100 подключенным к макетной плате.
Микроконтроллер получает команды от компьютера и отправляет данные через COM-порт.
Управляющие цепи запитаны от компьютерного блока питания
Ну и графический интерфейс я написал на C# в Visual Studio. Библиотека для построения графиков написана в MatLab.
И все это работает.
Там, где графики нагрузки, вы можете видеть, что у сигнала большой уровень шума. Я уже позже поковырялся в АЦП и теперь шум значительно ниже. Когда все компоненты будут запаяны на нормальную плату с нормальным источником питания, шум станет еще меньше.
Текущая конфигурация позволяет погонять мышцу под различной нагрузкой и собрать данные для системы управления. Выглядит это как-то примерно так:
Что тут происходит. На мышцу подается случайная последовательность команд. При этом я постепенно увеличивал нагрузку с шагом 1,25 кг.
Примерно на 50 кг сигнал с тензодатчика вышел из диапазона АЦП (коэф.усиления=128) и дальше я, уже из чистого любопытства, просто понавешивал все блины которые у меня были. Максимальный вес=65 кг и это, судя по всему, не предел.
В эксперименте участвовали эти черные ребята весом 20, 5 и 1,25 кг.
И теперь у меня есть 10К матлабовских точек. Что с ними можно делать?
Ну для начала длинна. В будущем проекте я хотел бы отказаться от непосредственного измерения длинны каждой мышцы, уж очень это громоздко и накладно.
Известно, что длинна пневмомышцы – это функция от давления и нагрузки.
Вот собственно одна из задач – найти эту самую зависимость и посмотреть можно ли вычислить длину, зная давление и нагрузку. А если можно, то с какой погрешностью. Для этих целей существует функция polifitX, которая аппроксимирует функцию полиномом заданного порядка. Я сейчас разбираюсь с ней, но если у кого уже есть опыт работы с подобными функциями в MatLab, то я буду благодарен за помощь.
Дальше больше. Клапаны управляются ШИМ и открываются с заданной скважностью 10 раз в секунду. Назовем эту скважность мощностью (в собранных данных этот параметр есть для каждой точки). Так вот, для нормального управления нужно, зная давление и нагрузку, а также требуемое изменение длинны за требуемое время (скорость), вычислить на какое время и с какой мощностью требуется открыть клапан.
Эта задача уже в разы сложнее. У меня есть пара идей и я все больше посматриваю в сторону нейросетей. Кстати, те данные, что я собрал отлично подходят на роль выборки для обучения.
В данный момент я как-раз пытаюсь раскурить нейросети, там много интересного, но область для меня новая и дело идет не очень быстро.
Если кто поможет – добро пожаловать в команду.
P.S. если тема вас заинтересовала и вы хотели бы поработать вместе со мной, то дайте знать. Проект конечно не коммерческий и денег на нем не заработать, но что-нибудь интересное в итоге точно получится.
Требуются Собственно, математик.
Электронщик (паять LQFP при моем зрении это адский ад). Москва и область.
Программист С++ для работы с STM32.
Программист C# для работы с управляющей программой. (начитался про Agile и давно хочу попробовать парную работу)
Инженер-механик.
62 комментария
как-то так. Не знаю как еще описать.
Зависимости там не линейные, нужно учесть много переменных и нужно эту зависимость как-то аппроксимировать, ну то есть получить формулу.
Способов аппроксимации много разных, самые распространенные это полиномами и нейросетями.
А так, извини, я только в лицей на физ-мат поступил. Не думаю что такой тип «специалиста» тебе понадобится.
И да, переведи матлаб, плиз
К сожалению помочь ничем не могу, но я поспрашиваю.
Я не понял зачем ты отказываешься от измерения длины? Без обратной связи получится разомкнутая САУ с жёстко заданной программой управления, которые сейчас уже почти не используются.
Я конечно не знаю что ты хочешь сделать, может в этом и состоит твоя цель, но допустим у нас есть робот, которому надо при помощи этой мускулы поднять груз на определенную высоту.
Если он будет вычислять давление по формуле, то каждый раз перед поднятием груза нужно будет взвешивать груз и вносить вес в алгоритм. Если же робот сможет постоянно контролировать длину мышцы то он сможет динамически подстраиваться под вес груза, такие САУ строятся на базе ПИД-регуляторов (статья не очень, но для начала сойдет).
Но если ты хочешь решить задачу именно в таком виде: «зная давление и нагрузку, а также требуемое изменение длинны за требуемое время (скорость), вычислить на какое время и с какой мощностью требуется открыть клапан» то тут уже надо вести речь о модели системы, которая будет прогнозировать недоступные измерению переменные состояния объекта (длину) и осуществлять управление используя это вычисленное значение. Задача очень интересная и пахнет диссером, особенно если тебе удастся под это дело нейронную сеть запустить. Гугли адаптивные САУ.
В любом случае я советую начать со стандартного ПИДа на датчике длины.
Кроме того, система очень инертна, клапаны чертовски медленно открываются и закрываются (по сравнению с транзисторами) и без системы, которая предскажет результат (а потом ещё и скорректирует сама себя в зависимости от ошибки) не о какой точности и плавности движений не может быть и речи.
У меня еще все впереди, я первокурсник на ИТ-направлении, тут полно матемаки.
Теперь буду ссылку на этот пост давать тем, кто говорит, что математика никогда не пригодится в жизни. Наконец-то у меня есть чем ответить им!
Где мой MS-DOS.
Относительно математики: wwwrus.imm.uran.ru (указатель)
«для чайников» их и нет, пожалуй. Другое дело, что некоторые книги могут быть удобнее других
Напр.: А.М.Тер-Крикоров, М.И.Шабунин «Курс математического анализа», 2007
Ф.А.Шолохович «Лекции по дифференциальным уравнениям», 2005
— Очень мощные книги
-На камазе можно перевозить очень большие вещи
:)
*при использовании торрентов
Не пойми меня неправильно, матлаб не плох (наверное), но вообще мне лично не понятно почему ты ограничиваешь так набор инструментов. Я не просто поболтать зашёл, я бы хотел помочь, но с матлабом дел не имел и не собираюсь. Легко тебе выдам аппроксимацию для набора точек, только какая вообще разница, на пюрешечке я это накодю или один запрос в вольфрам альфа напишу?
А про сложность ты зря, там нужно всего один раз мозги повернуть, чтобы уяснить матричную природу переменных, и потом все – можно работать.
С горем пополам дружу только с маткадом.
Экстраполяция — тоже, только вне диапазона.
А аппроксимация — нахождение именно функции.
для интерполяции и экстраполяции может использоваться аппроксимация.
вот какбэ пример аппроксимации
Автор, я смотрю на Табуне вы появляетесь, но продолжение интересной мне эпопеи так и не выкладываете.
Итак, успехи то с расчетом пневмопривода есть? =)
Кстати пригодились бы кодеры на С, и конструктора со знанием солидворкса.
Да, я тоже кстати, когда задумывался над идеей пневмомышц, задавался вопросом, мол как у экспериментаторов грыжи на мышцах не появляются, в такой оплетке же жилы никак друг к другу не прикреплены и свободно сдвигаются в сторону наименьшего сопротивления. В теории — пара сотен сокращений и вуаля. Ну у вас, как я смотрю, они прожили гораздо дольше. =)
А если не секрет, какого типа робот у вас строится и для каких целей? =)
PS
К сожалению знаний С и Солида у меня как у балерины.
Просто недавно заткнулся на Али на датчики мышечной активности для ардуино, и заинтересовался идеей позиционирования через усилие. Поначалу интересовался для этих целей пневмоприводом(поэтому и вспомнил о вашем проекте), но потом с удивлением обнаружил полное отсутствие подобных крупных проектов, использующих мышцы на нитиноле. В итоге заказал два метра поиграться. =)
И при этом, судя по скупой информации про него, он имеет небольшой, но все же диапазон температур, при котором возможно промежуточное состояние «недосрабатывания». Т.е в идеале напряг такой мышцы тоже можно наращивать просто повышая подачу напряжения на нее.
Сложность лишь в том, чтобы действительно изолировать жгут от окружающего воздуха, и поддерживать вокруг нее постоянную температуру чуть ниже температуры расслабления для быстрого ее срабатывания и расслабления. Т.е либо просто проветривать ее мощным потоком воздуха, либо пойти еще дальше и утопить их в циркулирующем трансформаторном масле.
Иначе робота на нитиноле можно будет смело называть «Ленивец-1» или «Слоупок-Ультра». XD
Могу только сказать, что там все очень клево пока получается. Если очень хочется поучаствовать — свяжись с mutronics