Pull to refresh

Comments 29

Приятно, примеры это всегда приятно, тем более под Arduino
Спасибо, я старался написать хороший универсальный пример работы с портом и с командами на Си, как оно должно быть в настоящей жизни с преобразованием типов указателей
Получилось очень показательно. Ну, а в коде как всегда нет совершенства
Совершенством кода можно заниматься бесконечно :)
А если вы считаете, что код достиг совершенства, то это всего лишь значит, что вы достигли своего потолка и пока ещё не набрались опыта для перехода на новый уровень, на котором, кстати, ваш старый код будет опять казаться безобразным
Добавьте фото в шапку по возможности
Я боюсь могут не оценить больше одной фотографии до ката. А так если необходимо могу добавить нужную фотографию до хабраката. Вопрос какую?
Отличная статья! Нет, правда.
У нас в инсте есть препод по математике, который говорит так: «Не важно, какой раздел вы сейчас изучаете, высшая математика, дискретная или теория вероятностей. Взяв одну задачу, вы сможете её так разобрать, что будущие поколения по ней смогут целый раздел изучить.»
Моё мнение, что вы к этому приблизились, эта статья может стать отправной точкой для начинающего. Но только он не просто помигает диодом, а поймёт немного больше.
Вообще до этого я занимался программами управления гидравликой, а тут появилась мысль поиграться с серво приводами, а также донести до людей принципы управления такими устройствами.

Так это занятие породило на работе дискуссии на тему будущей реализации шести степеней и других манипуляторов, потому что физики утверждают, что пластиковую серву просто поломает, если сделать шесть степеней на этом типе серв.
Немного позанудничаю =)
Для создания платформы Стюарта (или любого другого параллельного манипулятора) необходимы актуаторы в виде линейного привода, ваш манипулятор на сервоприводах съест вам мозги при первой же попытке усложнить программу управления (например, решить классическую задачу — «описать» платформой заданную траекторию). Как вариант, можно перейти от поворотных сервоприводов к поступательным парам при помощи маленького КШМ, однако будет необходимо учитывать непропорциональную зависимость смещения от угла поворота.
Вообще, тема подобных устройств очень интересна, рекомендую изучить: http://www-sop.inria.fr/members/Jean-Pierre.Merlet/merlet_eng.html
Ну и, конечно же, не останавливайтесь на достигнутом, развивайте и усложняйте установку. Успехов!
Спасибо за ответ! Как раз стоит вопрос, на чем делать шесть степеней. Например на линейных приводах (который стоит один от $15) выходит дорого, я видел варианты купить уменьшенную гидравлику.

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

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

По поводу траектории, буду прикручивать управление через Bluetooth или через акселерометр (уже пришел из китая), та программа, что заложена в конечной версии тестера, полностью покрывает задачу манипуляции в XYZ системе координат.
Я вам предложу слегка извращенный вариант — использовать эти же сервоприводы, а КШМ извлечь из игрушечных паровозиков или другой детской радости =)
Создавать «на коленке» датчики перемещений — довольно муторное занятие, для получения хорошей точности придется немало повозиться, поэтому использование серв, на мой взгляд, — оптимальное решение. Кроме того, появляется еще одна интересная промежуточная задача — написать ретранслятор (h1;h2;h3...) в (φ1;φ2;φ3...), если ваша программа принимает на вход длины актуаторов.
Касательно программы управления в XYZ в тестере — не поделитесь?) Интересно было бы поглядеть, как решается подобная задача в условиях Arduino.
Задача преобразования (h1;h2;h3...) в (φ1;φ2;φ3...) в Arduino будет решаться внутри, когда я прикручу акселерометр, заодно разберусь с ним (все равно пришел уже), а также выложу код. Сейчас задача решает в лоб в программе, только для трех степеней и данной конфигурации, с учетом того, что все углы ребер одинаковые.

Сейчас заказаны шаровые от вертушки, модернизация ими не пройдет даром на жесткости конструкции. А есть КШМ на ebay или что-то похожее? Это было бы хорошее решение!
К сожалению, готовых КШМ не встречал, точно знаю, что китайцы продают там неплохие ШВП (в том числе и с датчиками положения), однако цена, наверняка, кусачая. Такими штуками увлекаются любители самодельных станков с ЧПУ, можно поспрашивать, где купить подешевле на соответствующих ресурсах.
Насчет жесткости конструкции (это болезнь всех параллельных манипуляторов) — приглядитесь к подобной схеме, такие архитектуры отличаются высокой жесткостью (центральная штанга воспринимает изгибные деформации) и гораздо легче обсчитываются.
Спасибо за пример, да в реальной жизни делали пассивный цилиндр (как в вашей схеме), второй вариант сделать с шс улучшение жесткости. Т.е. имеется рамка с шс фиксированная, которая держит платформу и поворачивается с ней.
Жаль не написано что за сервоприводы используются… А так идея именно такой платформы, программа симуляции есть и своя, вопрос реализации.
Простите меня за занудство, но для данной задачи мега абсолютно избыточна
Да, я тоже так думаю.Однако более избыточно, купить ещё одну ардуину — не избыточную.
Мега бралась на все случаи жизни в виде Arduino Mega Kit + Dusplay + IR и куча всего в комплекте, а брать меньшее нет смысла. Меньшую плату я могу брать теперь, когда у меня есть куча всего, и новые проекты наподобие автоматизации дома или сада, которые не требуют покупки такого кита.
А почему нет кода программы управления?
Там одна функция полезная, и то типовая для работы с SerialPort классом, если необходимо, могу выложить данную функцию
Лучше полный листинг, ведь новичкам сложно будет написать с нуля такую программу. Думаю в такой статье обязательно публиковать полные листинги программ. А то как сверлить отверствия в фанере написали, а листинги не опубликовали.
Выложил исходник класса управления
1. Объясни ПЛЗ как у тебя парсится поток байт, прилетающий по сериалу. Я вижу, что как только прилетел байт, ты зовешь обработчик. Я правильно понимаю, что ты всегда ждешь на входе команду, и если прилетит не команда, а, скажем, ее половина, то у тебя поля структуры забьются мусором или вообще все вылетит? Просто мучаюсь тем же примерно, читаю колцевой буфер движущимся окном, но все это очень долго и ненадежно…
2. Вот это вообще странно:
switch(buffer[0])
{
case SET_CMD:
set_positions(buffer);
Serial.write(0xDA);
break;
}
Зачем?
вообще здесь сделан упрощенный вариант, где не проверяется длина и нет контрольной суммы. В нормальном варианте, когда команд много делается так:
1) проверяется команда из первого байта
2) проверяется наличие необходимого набора байт через sizeof
3) проверяется контрольная сумма байт для заданной команды (чтобы мусора не было)
4) прводится тип указатяеля и разбирается команда

В случае ошибки того или иного этапа, ты формируешь различные коды ошибок
Sign up to leave a comment.

Articles

Change theme settings