Чёрная рука бюджетной автоматизации

image

Испортим интригу заголовка сразу? Речь пойдёт о промышленной руке робота «за не очень дорого», во много раз дешевле нового аналога. Почему чёрной? Всё просто, наше применение манипулятора одно из моря возможных и довольно редкое: робот таскает камеру и нужно максимально убрать отражения света от самой руки.

Зачем же так усложнять видеосъёмку? Ответ прост: робот даёт скорость, точность и многократную повторяемость траектории движения камеры, не говоря уже о сложных траекториях, для достижения которых живому оператору придётся стать гибридом бабочки и шланга от пылесоса. Чётко заданный цифрами путь камеры хорош ещё тем, что отснятый материал можно без особого труда использовать в 3D-сценах на компьютере. То есть, стирается граница между камерой реальной и виртуальной при создании видео с элементами компьютерной графики.

Готовые съёмочные решения робототехники напугали ценой (примерно $150 000 и дальше в космос без остановок), поэтому был выбран путь голодранцев, когда цена платится в меньшей степени денежными знаками и в большей — временем, пОтом, матом и седыми волосами.

Многомесячные тематические просмотры ютуба и сравнения спецификаций на официальных сайтах, длинные и зачастую пустопорожние переписки с продавцами китайских и не очень рук в итоге всё-таки вылились в покупку робота. Им стал вышедший на преждевременную пенсию ветеран европейского автопрома родом из нулевых годов, бывший сварочный 6-осевой манипулятор KUKA KR125/2 с установленными новыми китайскими моторами и контроллерами с полезной нагрузкой 90 кг.

Что же у нас в коробке? То есть, под стретч-плёнкой? Там у нас сам робот, сделанный из куска бронепоезда шкаф с платами и кабелями, плюс проводной пульт управления с тачскрином (teach pendant). Общая масса всего этого счастья примерно 1,3 тонны, включая дополнительное восьмиугольное стальное основание, разгружающее бетонный пол нашего… 4-го этажа







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



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

Дело в том, что программа в teach pendant пишется построчно, текстовый файл с G-кодом (есть и свой язык в контроллере, но в нем не нашлось особо ничего, чего бы не было в G-коде). Проблема оказалась в том, что рука выполняет программу построчно. То есть, прочитала строку — сдвинулась — остановилась. Прочитала вторую и сдвинулась дальше. После исполнения каждой строки в программе происходит остановка. Настройками можно лишь указать ускорения и замедления, но нет возможности убрать сам факт этой остановки. Производитель моторов и контроллеров подтвердил, что так оно и есть. В итоге все мечты о плавном сложном многоосевом движении камеры ушли в небытие.



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



Попытки связаться с рукой через компьютер особым успехом не увенчались. Для связи используется протокол Modbus RTU, но это не полноценное управление а всего лишь имитация нажатия кнопок на teach pendant. Это позволило подключить через компьютер обычный геймпад вместо тяжелого teach pendant, но тоже с кучей ограничений как например невозможности нажатия 2х клавиш одновременно для движения по диагонали.



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

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



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

Комментарии 36

    0
    Что ж, смотреть надо в сторону программных стоек ЧПУ станков: LinuxCNC (иии больше не помню навскидку, но только не Mach3), либо на софт управления 3d принтером (который нынче аж «12ти осевые» агрегаты поддерживает — Marlin допустим).
      0
      Вообще для анимации камеры я импользую связку Maya+Mimic. На выходе получается CSV таблица — время + повороты всех 6ти осей. инверсную кинематику расчитывает сам Mimic. Мне лишь нужно по Powerlink заставить двигатели вращаться туда куда указано в таблице.
        0
        Не знаю что такое Powerlink. Может выкинуть мозги, а степ-диры считать какой-то опен соурс платой? Почему я и предложил Marlin / LinuxCNC / grbl. Вот допустим на grbl www.youtube.com/watch?v=-LXOr3PHTPQ
          0
          Плохая идея. Хотя бы потому что они дорого стоят и их надо 6 штук. Ethernet Powerlink — это промышленная шина позволяющая управлять разными устройствами. Не такая крутая как EtherCat, но и в реализации куда проще получается. Это исключительно софтовая реализация поверх TCP/IP стэка. В итоге подключить можно к любому компьютеру обычным сетевым кабелем, а дальше из открытых исходников собрать Powerlink и дописать свои костыли под него. Собственно этим и пытаюсь заниматься, но все больше понимаю что осилить лично для меня это будет сложно
            +2
            кто стоит дорого? я не понимаю: там внутря у неё неонка, предполагаю что там шаговые двигатели, контроллеры ШД, и плата мозгов. Даже если там сервы, это ничего не меняет. будет сервы / контроллеры серв / мозги.

            UPD: вот же контроллеры серв:
            image
              +1
              в промышленных роботах не используются шаговые двигатели. Там стоят нормальные такие, весом по 10кг, 3х фазные движки. Конкретно в нашей руке 3 больших двигателя и 3 поменьше. Большие естественно на первые оси. Двигатели имеют скорости вращения 3000 об/мин. Так же в них установлены абсолютные энкодеры и тормоза (безопасность она важна). Все это дело подключается к драйверу двигателя который уже и крутит куда надо и общается с энкодером. Выше в цепочке стоит контроллер который управляет двигателями по Powerlink. В контроллере все мозги и зашиты по расчету кинематики и т.п. Дальше подключен Teach Pendant — это такой пульт в руках который держат и тыкают в него пальцами. Фактически это терминал для настройки и написания программы. В нашем случае мы хотим сделать свой контроллер и подключить его к компьютеру. На компьютере же считать кинематику и прочее, но это уже готово как я писал выше. Цены на всё это дело большие учитывая много-киловатные моторы, драйверы для них и т.п. Рука весит почти тонну и для её перемещения надо реально большие моторы. В холостом ходу, когда к руке не прицеплена полезная нагрузка — вся конструкция потребляет кажется 6кВт электроэнергии. Теоретический максимум (до срабатывания защиты по току в движках) — 18кВт. Можете погуглить цены — но скажу что это сотни тысяч если что…
                +1
                Сотни тысяч, а «на конце» схемы сейчас стоит контроллер который не умеет то, что делает контроллер любого 3d принтера за 2 тыс. рублей: плавно перемещать оси, учитывая рывки-ускорения-скорости с планировщиком перехода от кадра к кадру (слово кадр в данном случае относится к G-code термину)
                  0
                  Вы не правы. он умеет перемещать точно и туда куда надо. Данный контроллер используется например в сварочном роботе и все варит и точно и куда надо. Проблема в том, что контроллер может двигать руку робота лишь как «руку робота». Видели мужиков на арбате которые роботов изображают стоя на улице? Двигаются угловато, останавливаются и всё такое. Вот именно так всё и у нас — двигается ровно. И останавливается после каждой строки G-кода. Только мне надо плавные движения, не по прямой или круговой орбите (в G-коде 2 варианта перемещения, прямо и по дуге). Мне надо нарисовать кривую движения произвольную, скорее органическую. Я могу разбить кривую на прямые отрезки и запустить — но каждый отрезок это строка G-кода и после каждой строки следует остановка руки…
                    +1
                    В этом и отличие. Посмотрите как двигается голова 3d принтера: от кадра к кадру (от строки к строке) она переходит плавно, с учётом «рывка» и «ускорения», если там небольшой угол, то переход будет вообще без остановки.
                    В Mach3 (фрезерование, DSP программа) это называется параметр Exact Stop / Constant Velocity.
                    Он даёт либо полный останов в точке, либо прохождение её аппроксимацией в дугу.

                    И ещё. В G-code есть кадры G2/G3 — робот умеет их?

                    UPD: посмотрите видео www.youtube.com/watch?v=XT2Jq76NChM тайминги 1:40 и 3:40
                      0
                      Посмотрите как двигается голова 3d принтера: от кадра к кадру (от строки к строке) она переходит плавно, с учётом «рывка» и «ускорения», если там небольшой угол, то переход будет вообще без остановки.

                      Добавьте осей и просто принтер не сдюжит. Собственно, если уж знаете про g2/g3 (которое по определению в g17/18) представьте себе перевод расширяющегося спирального движения в трех осях одновременно с удержанием направления инструмента поворотом 4й и 5й. Поверьте, это сложная фигота.
                  0
                  (безопасность она важна).
                  А, кстати — на счет безопасности, которая важна… Обычно роборуки, которые работают в зоне присутствия людей, имеют очень продуманные системы безопасности, тормозящие их при малейшем взаимодействии с чем-либо (что может быть человеком).

                  А промышленные роботы, вроде этого — предназначены для автоматических сборочных линий, куда люди не допускаются…

                  У вас как в этом плане? Если под него попасть — он ведь не остановится, да?
                    0
                    в данный момент так и есть — никакой защиты. но мы работаем над этим вопросом параллельно. пока решение есть на основе простых оптических датчиков расстояния которые можно обвесить со всех сторон… но на практике руки которые «чувствуют» столкновения обычно в 10-50 раз меньше по весу и имеют куда более слабые движки. там просто следят за током и в случае столкновения он скакнёт и можно тормозить. в нашей руке с многокиловатными моторами — она не заметит что сбила человека, стол или стену )) там только внешние датчики. вообще в моторах есть тормоза которые просто блокируют двигатель и на них можно подавать свои сигналы мгновенно останавливая руку. в общем это в процессе, а пока стараемся так сказать «не стоять под стрелой»
                      0
                      Ну… Берегите себя!

                      Такая штука… Не очень предназначена для студии. Больше для зон, куда человек не может попасть в принципе… Один неловкий клик мышкой и… Все-таки для каждой области применения — свои технологии.
                0
                Я тоже не настоящий сварщик, но станцевал бы от Ethernet'a. Вставьте в разрыв Ethernet'a хаб, подключите компьютер и перехватите трафик. Не думаю что там так уж тяжело разобраться, тем более если есть представление о протоколе и возможность посылать любые команды с пульта. Сомневаюсь что трафик шифрованый — параноя туда ещё не докатилась. В лучшем случае увидите текстовый обмен, в худшем — бинарные пакеты с фиксированными позициями переменных. Сравнить пару сотен пакетов и сможете составлять их сами…
                Вот тут люди вроде бы тоже пробовали:
                www.researchgate.net/publication/231167196_Application_of_Ethernet_Powerlink_for_Communication_in_a_Linux_RTAI_Open_CNC_system
          0
          Попробуйте связаться вот с этими товарищами, они уже бегали по этим граблям.
          Механика самодельная, привода от Festo, управление через EtherCAT, самописный драйвер и ROS.
          Возможно схантите оттуда программиста.
            0
            Спасибо. Попробую. ROS рассматривал, но не вижу смысла в нем так как программная часть на стороне компьютера уже есть, а надо лишь отправить команды двигателям куда вращаться. ROS + MoveIt рассматривал с самого начала, но потом отказался от этой идеи
              0
              Если нужно есть исходники под EtherCAT и Festo. Там без ROS, на сколько я понимаю.
              yadi.sk/d/zBJ6CssnDwHrvQ
                0
                В моих драйверах используется протокол Ethernet Powerlink
            0
            Это очень круто
            можно делать 3D даже без графики, при помощи проектора и синхронизацией с роботом.
              0
              Вариантов применения рук для «арт-проектов» много. Но почти всегда это новая Kuka + mxAutomation. А это минимум 150 тысяч долларов за минимальный комплект. Но всё равно потом еще написание своего софта для управления рукой и всего остального. Лично у меня «хотелок» много, и в них включены и трэкинг объектов и автофокус (именно «авто» с замером расстояний до объекта). Но начинать надо с простого
            0
            Я недавно сам заинтересовался темой роботов, так что по доброму завидую вам что можно поиграть настоящей роборукой. Я хоть и не настоящий сварщик, но может вам поможет:
            1. У роборуки как и у любого станка ЧПУ есть такая штука как Планировшик. Именно он по сути отвечает за безшовное движение между строкам GCode. При этом он не тупо пускает команду одну за другой, а смотрит что бы движение укладывалось в лимиты по ускорениям, и траектории. То есть если у вас движение 10см вперед, а потом 10 см резко вправо, он и остановит руку на какой-то момент, так-как поментально повернуть под острым углом не может. Если в мозгах руки есть что-то такое, то наверно стоит покопать там.
            2. Раз у вас отдельные драйвера на сервы, то скорее всего они смогут обеспечить параллельное движение без особых проблем, может быть надо поменять мозги на что-то более современное. Врядли удастся заюзать grbl, так-как основная ветка рассчитана на 3х осевой станок, хотя есть вроде форки на 4 и больше.
            3. Лично я не много охренел от количества матана необходимого для рассчета движения многозвенного робота. Если матрица вращение это еще куда не шло, то расчитать все шесть матриц для обратной задачи робототехники, задача уже не тривиальная.
            А если учесть что мало расчитать сообсвенно куда двинуть (насколько повернуть) каждую серву, а ще надо расчитать ускорения и торможения, да с учетом всех моментов (особенно если конечная нагрузка разная...) то на 6 матриц выше, нужно еще столько же но уже со всякими ускорениями и ограничениями.
            Короче говоря, имхо написание своей системы управления, задача крайне не простая и возможно проще поискать что-то готовое типа той же ROS что писали вверху.

            P.S. По последнему пункту я смотрел довольно устарешвую литературу, может сейчас есть методы попроще и поэффективние.
            P.P.S. Штука способная поднять 90кг, способна так же легко запустить любого зеваку на орбиту. Не даром на производстве роботов «садят в клетку».
              0
              Как раз с мозгами и пытаемся что то придумать. Лимиты и все траектории уже рассчитаны и учтены. Используется Maya + Mimic. В плагине происходит проверка всех траекторий на лимиты поворотов, чтобы робот вообще смог сделать движение которое ты задал. Так же рассчитываются скорости и ускорения и тоже сверяются с лимитами которые есть у руки. На выходе получаем не траекторию инструмента, а просто повороты каждого двигателя через промежутки времени. Эти промежутки задаются при выгрузке данных. По умолчанию там стоит 25 раз в секунду, но без проблем можно выгрузить и 1000 раз в секунду все данные.

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

              Кстати, ускорения и замедления делаются не на уровне контроллера, а на уровне построения траектории движения. У меня задача не в том чтобы упростить программу для робота оставив 3 строчки G-кода, а в том чтобы моя виртуальная камера в Maya двигалась на 100% как рука робота. Если же я сделаю такую анимацию которую рука не сможет воспроизвести — то сразу получу ошибку плагина который уведомит о превышении лимитов по скорости, ускорению, положению и т.п…

              ps. дать поиграться с рукой — это не проблема. вопрос в том, что надо найти человека который знает что с этим делать а не просто ради любопытства постоять рядом
                0

                Ну вот как-то странно что у вас робот останавливается после каждой строчки. На выставке роботов, видел как они фрезеруют и печатают == это сотни и 1000 строк gcodе которые проходят без заминки. Так что либо мозги напрочь устарели либо ещё что.
                Про Maya + mimic не знал, прикольная штука спасибо.

                  0
                  Разные контроллеры — разный софт. Мне достался такой вот контроллер. Я перерыл настройки и даже связался с производителем. Те лишь подтвердили что так и есть — остановка после каждой команды… Так что придется жить с тем что есть.

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

                  Кстати, даже без этих вот сглаживаний не верно рассчитываются движения с доворотами. начало и конец где надо, а между этими точками все моторы едут линейно условно говоря и в итоге ты хочешь чтобы камера проехала по прямой и «следила» за объектом, а на практике в центре траектории съезжает точка куда смотрит камера. Все по той же причине — для контроллера понятие доворота не существует. Eсть движение из точки в точку и оно линейное.
                    0

                    Понятно, видимо 10-15 лет разницы развития и дают такую пропасть в управлении. Похоже в авто индустрии требования были "приехать из А в Б, и не врезаться при этом в С" — вообщем-то типичный режим погружчика. Как оно будет вести себя в процессе перемещения никому не интересно. Удачи вам в покорении этого "монстра".

              0

              Конечно поздно что то говорить после…
              Но судя по тому что:


              • Закреплено все стационарно + тыква на столе (т.е. это для павильонных сьемок)
              • Вес камеры не слишком большой (не 90 кг точно)
              • Больших ускорений не нужно (камера не выдержит)

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


              Хотя, купить конечно проще. Но в таких случаях железка — это часть проблем. А вот математика для ее управления...

                0
                Если не найдёте программиста для контроллера — можно написать напрямую авторам статей по Powerlink и CNC. Все имейлы есть в статьях, искать удобно тут, например
                www.researchgate.net/search.Search.html?type=researcher&query=Powerlink%20cnc%20controller
                З.Ы. Я не в теме, поэтому не понял. Это стойка (пульт оператора то есть) такая странная и допускает одну команду за раз или сами кишки контроллера не осиливают предвычисления?
                З.З.Ы. Скорости и ускорения на видео визуально большие. Мне кажется, надо их уменьшать.
                З.З.З.Ы. Вроде как искусство монтажа подразумевает, что камера не идеальная.
                З.З.З.З.Ы. Вы пишите, что можно уменьшать паузу. Поставить паузу в ноль нельзя с одновременным разбиением траектории на очень мелкие кривые?

                Наконец, есть профильные форумы по станкам и их программированию. Из мне знакомых cccp3d и chipmaker.
                  0
                  Пауза ноль и есть. Это скорее задержка между сегментами ноль. То есть остановился и мгновенно начал разгоняться и выполнять следующий сегмент. Но в конце сегмента снова остановка и снова задержка ноль перед выполнением следующей команды.
                  0
                  Стоит у меня дома(!) Kuka, для которой я написал софт, скручивающий стандартный контроллер с Maya и Mimic в реальном времени.

                  Все ваши проблемы приходят из за того, что купив робота подешевле, и подумав, «ай, ну и пусть не родной контроллер», вы выстрелили себе в ногу. При помощи другой ноги. Контроллеры SZGH — полухлам, предназначенный исключительно для «возьми это, дёрни релейкой, кинь туда». Конкретно в вашем экземпляре двойной выстрел в ногу произвёл ещё и «пересборщик», поставив туда самые убогие сервоприводы, которые очень не любят отсутствие жёсткости(по сравнению с большими пыщ-станками, хоть для робота жёсткости тут полно).

                  У настоящих производителей правильных роботов(не только Kuka) контроллеры подстраиваются под сервы годами, включая автоматическое тестирование и профилирование. Всё это уехало вместе с предыдущим контроллером в нарнию.
                  В оригинальных же контроллерах поддерживаются протоколы высокоскоростного управления роботами на низком уровне, в реальном времени. Для Kuka это RobotSensorInterface, и несмотря на имя, он не только для сенсоров. Стоит опция ~$5000, если брать для БУшного робота. Ну, или найти где надо ;)

                  Единственный для вас вариант(без сжигания денег) — выкинуть мозг SZGH(пульт и его breakout board), найти даташит сервоприводов, их полностью по одиночке оттюнить, и прикрутить к LinuxCNC, а туда уже нарисовать свой парсер для экспортов из Mimic.

                  Если хочется сжечь денег, то найти оригинальный KRC2… и сервы… и RDC плату… а потом купить ещё одного БУшного робота.

                  Если хочется посотрудничать, можно в ЛС, к диалогу готов.
                    0
                    Даташит приводов есть и собственно идея сейчас в том чтобы «построить» свой контроллер для управления напрямую двигателями
                    0
                    К сожалению у Вас старая система управления. Если бы была KRC2, проблем было меньше (я с ней работал), много вариантов как задавать траекторию, плавность и т.д… Так же от KUKA есть софт для оффлайн программирования.
                    К сожалению вам разрабатывать свой софт надо, «с матами и седыми волосами».
                    Не забывайте про безопасность, робот тяжелый, скорость может высокую выдать, человек столкновения не перенесет. На производстве они закрыты ограждениями, можно лазерные рамки использовать.
                      0

                      Не пытайтесь сделать контроллер с нуля. Есть опенсурс Odrive и аналоги.
                      они вам по ваттажу не подходят но надо с чего-либо начинать.

                        0
                        Вы видимо не поняли. О каком «ваттаже» идет речь? У меня Драйвера управляют двигателями, а я делаю контроллер чтобы управлять драйверами через Ethernet Powerlink
                        0

                        Да я о том скорее что с текущими контроллерами может и не получиться.

                          0
                          слона надо кушать по частям. короче решать проблемы по мере их поступления. если выясниться что данные драйверы двигателей так же не удовлетворяют условиям эксплуатации — то буду принимать решение. потом. сейчас я пытаюсь вообще до них достучаться и не получается. Powerlink не даётся с наскока. Даже скачанный LiveCD Powerlink Demo — не видит драйверы двигателей. И вопросов пока что больше чем ответов учитывая что я мало в этом понимаю и потому и спрашивал совета или даже помощи в решении этой проблемы.

                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                        Самое читаемое