Скетч для рисующей роборуки
- Войдите на сайт для отправки комментариев
http://www.thingiverse.com/thing:989931 Здравствуйте! Распечатал такого вот робота. Собрал,подключил к ардуине,подвигал сервами, всё круто!
Теперь нужно писать код,чтобы рука буквы писала, подскажите пожалуйста хотя бы алгоритм для проведения линии из точки А в Б. Линии думаю делать прямые.
https://geektimes.ru/post/255782/ Видел я этот пост,но интересно осуществить задумку без метаний по сторонним программам,если это как-либо вообще возможно...
Единственное,что для меня видится возможным,это пробовать менять функцию SERVOATTACH, пока нужная линия не выйдет... Но это очень долго и нудно)
Возможно есть уже какие-нибудь библиотеки под это дело,или что-то в этом духе?
Буду очень признателен,если сможете скинуть скетч хотя бы для одной буквы,чтобы мне по аналогии повторить...
ОТКЛИКНИТЕСЬ!!!
и, мне для робоноги(левой) напишите скейтчь.
подскажите пожалуйста хотя бы алгоритм для проведения линии из точки А в Б. Линии думаю делать прямые.
Пожалуйста - Алгоритм Брезенхэма, Алгоритм Ву, Алгоритм DDA-линии.
Выбирайте, какой Вам больше подходит.
Но по уму, здесь не нужен цифровой алгоритм растеризации. Здесь нужно Вашу линию представить в параметрическом виде и тогда можно одной сервой рисовать x-выражение, а другой - y-выражение
подскажите пожалуйста хотя бы алгоритм для проведения линии из точки А в Б. Линии думаю делать прямые.
Пожалуйста - Алгоритм Брезенхэма, Алгоритм Ву, Алгоритм DDA-линии.
Выбирайте, какой Вам больше подходит.
Но по уму, здесь не нужен цифровой алгоритм растеризации. Здесь нужно Вашу линию представить в параметрическом виде и тогда можно одной сервой рисовать x-выражение, а другой - y-выражение
вот тут как раз LISP бы подошёл )))
QWONE,насчёт тренировок моска вы,несомненно,правы) Но я не придерживаюсь тактики создания собственного велосипеда. Думаю есть где-нить на англоязычных форумах эта тема и наработки по ней,нужно только поискать...
Ворота,спасибо за подсказки об этих алгоритмах,попробую в них разобраться и реализовать в роботе)
UA6EM Загуглю про этот LISP,посмотрим что это за такое)
Всем спасибо за помощь!
Если возникнут вопросы,то я знаю,на кого можно положиться)
Возьмите исходник простой графической библиотеки, например, ugui. Там всё есть.
Спасибо,Uni.Думаю разберусь с ней)
Вообще я сейчас нахожусь на этапе сбора и обработки информации,радостно получаемой от знатоков (ибо сам в этом я -1).
И,раз уж пишу,такой вопросик:нормально ли работает плата Arduino Nano 238p с тремя одновременно работающими сервами?
Я пытался запускать её в проверочном режиме, пример swipe,или как там,только для трёх серв.И плата отключалась от компа каждые 2 секунды работы,а затем заново подключалась и так до бесконечности... Тоесть она не может стабильно питать 3 сервы,или это мой косяк?
Ваш косяк. Серва требует хорошего блока питания . Работа моторов серв просаживает питание и сбивает работу ардуины.
И ещё одно, Uni. Туплю конечно,но вы имеете ввиду разбить листочек на огромные пиксели и для каждого из них узнать положение обеих серв в градусах? Типа пиксель(16;3) и servo1(20),servo2(40)? Тоесть для каждого пикселя иметь значения положений серв? Или это совсем не так,как представляю? Qwone,а если работать ими поочерёдно или вообще отключить от питания третью серву отвечающую за пробелы между линиями,изменится ли ситуация,или нет?
Фигни вам насоветовали, начиная от теорем и растра до либки. У Вас изначально устройство векторной графики, растра тут нет и не нужен. Векторній построитель рисует линию не по точкам а сплошняком, аналогично человеку, хотя и перемещается дискретно, приводы такие.
Кроме того в конструкции я так вижу нет подёма маркера, значить рисуем без разрывов?
Вся проблема в математике. Необходимо пересчет делать между линейными координатами, привычными нам, удобными в рисовании прямых и угловыми естественно возникшими в данной конструкции. Это относительно не сложно, школьная тригонометрия, но владеть ею хороше надо. Собственно задаем прямую формулой, на ней отрезок ограниченый возможностями достать его точкии. Задаем Х по формуле прямой определяем Y, затем пару координат пересчитываем в углы поворота серв (будет несколько вариантов, изучаем все выбираем лучший). Имея зависимости углов от (X,Y) и параметров прямой реализуем рисование прямых. Из них уже остальное.
ИМХО - я б с этой фигней не возился, область рисования малая и кривая, нет подёма пера. Сильно ограничены возможности. У вас есть 3Д принтер? Поменяйте экструдер на маркер - интересней будет.
В принципе, можно и по точкам рисовать сплошную линию. Если читать кадр попиксельно в цикле начиная с нижнего левого. Если натыкаемся не на пустой пиксель, тыркаем маркер. Проверяем соседние пиксели по часовой стрелки, продолжая движение маркера всегда на первый попавшийся не пустой пиксель слева и опять проверяем соседей по часовой. Запоминаем обработанные пиксели. Если больше нету соседних необработанных пикселей, продолжаем читать кадр в цикле пропуская обработанные.
Вообще, если задача только писать буквы и примитивные картинки, то можно управлять роборукой с помощью мышки, записав последовательность команд.
Logik,есть там серва для подъёма,только её на фотографии не видно,она с другой стороны стоит. Можете пожалуйста дать ссылку на эту формулу и её применение? Тригонометрию ещё не проходили,нас ей пока только пугают)
Nosferatu,нашёл я этот пост,вы об этом говорили?
http://arduino-diy.com/arduino-robot-khudozhnik
Там говорится :
(Решение обратной задачи кинематики для перемещения рабочего органа к определенному пикселю. При расчете берутся координаты пикселя и вычисляются соответствующие углы приводов. Как именно решается эта задача можно увидеть на рисунке http://www.arduino-diy.com/wp-content/uploads/2015/07/143637756762_kiss_...) Logik,вы это имели ввиду?
Тоесть,насколько я понял,нам всё-таки нужно для каждого пикселя рассчитывать угол поворота серв? Это же нереально каждый пиксель так рассчитать...
А,вот,нашёл походу :
(Конечно же, вы можете настроить параметры определения положения рабочего органа в соответствии с вашими габаритами конструкции.) Фух,а я уж перепугался...
Ладненько,попробую этот способ...
А вот про управление мышкой,Nosferatu,если можно,поподробнее...
Кстати,Рука моя уже дуги рисует!
//Можете пожалуйста дать ссылку на эту формулу и её применение? Тригонометрию ещё не проходили,нас ей пока только пугают)
Не могу я её в глаза не видел. я только изложил подход к решению. Вам стимул выучить тригонометрию досрочно.
//....Logik,вы это имели ввиду?
По сути да, но с оговоркой. Нет у Вас никаких пикселей, и быть не может. Есть координаты начала и конца отрезка прямой. И из таких отрезков все рисуется. Длина отрезка - компромисный вопрос, чем короче тем точней, но медленей. Обычно на плотерах это несколько милиметров, на нарисованых окружностях хороше видно.
//Тоесть,насколько я понял,нам всё-таки нужно для каждого пикселя рассчитывать угол поворота серв? Это же нереально каждый пиксель так рассчитать...
Да нету у Вас никаких пикселей))) Расчитать углы поворотов серв для начала и конца отрезка. Устаноаить углы начала и плавно равномерно изменить их так, чтоб стали углами конца. При этом маркер нарисует чегото на отрезок похожее. Чем он короче - тем похожее.
ПС. По вашей же ссылке и формула и решение и обяснение
А вот про управление мышкой,Nosferatu,если можно,поподробнее...
Для этого надо написать простенькую программу для компьютера, которая будет отсылать координаты курсора мышки в COM порт ардуине. Программная эмуляция джойстика.
Nosferatu,если можно,дайте пожалуйста ссылочку на эту программу для эмуляции мыши под ардуину,если не сложно... Хоть протестить бы,как это...
Ссылок не знаю. Есть скетчь на Processing-е, моя заготовка, можно его использовать.
При перемещении мышки в окне программы, в порт отправляется значение, на сколько передвинулся курсор мышки в "+" или " -" по X и Y.
Также отсылаются в порт символы нажатых клавиш. Можно назначить клавишам команды: старт, стоп, запись, шаг назад, удалить запись и т.д.
По умолчанию программа подключается к первому по номеру COM порту в системе. Скорость 9600.