Jump to content
Korean Random

kharlashkin

User
  • Content Count

    829
  • Joined

  • Last visited

  • Days Won

    7

Posts posted by kharlashkin


  1. 2 минуты назад, Oleg_Oldis сказал:

    Доброго времени суток интересно менялось ли или дорабатывалась система на протяжении года или так и оставили?

    Добрый день и вам.

    Ну скажем так, была разработана платка где все компоненты совмещены, сделано было 40 таких платок (2 комплекта). Сильно покопал тему перемещения в пространстве, пока сильно не получается допилить из-за отсутствия большого помещения для расчетов триангуляции. Разработал похожий прототип для обновленного датчика ICM-20948, работает не хуже. Перевел передачу протокола между датчиками и точкой доступа на mqtt-sn. С одной стороны вроде толкаю его, с другой плохо толкается, так что не сильно усердствую. Как то так.

    • Upvote 1

  2. В поисках более "легковесного" протокола для передачи данных наткнулся на MQTT-SN. Поковыряв его пару выходных - родилась статья. А вообще выглядит очень многообещающим для общения между частями будущего робота.


  3. 20.02.2021 в 14:47, kharlashkin сказал:

    В отношении МК думаю что более популярным будет что-то "ардуиноподобное" - я смотрю в сторону ESP8266. А вот в отношении мозгов долго думал и купил для старта бу-шный PC-Stick на Intel Atom X5-Z8350 с 4 ГБ ОЗУ и 32 ГБ SSD. Хотя потом уже понял что нужно было переплатить немного и купить с USB3 (у меня только USB2), так как модули компьютерного зрения с сенсорами глубины только USB3. 

    Раз уже заикнулся - то наверное стоит описать примерную логику головного и спинного мозга будущего робота. Буду дополнять по мере возниконоваения мыслей.

    Как упомянул уже в качестве основного мозга нужно использовать что-то попроизводительней обычного МК, с полноценной ОС (я склоняюсь в сторону Ubuntu). Ломал голову досаточно долго по этому поводу как и что я вижу:

    • У нас будут файлы движений к ватернионах с отметками времени. Кстати я так и не нашел плохо искал файлы для движений где в основе кватернионы, стандартные *.bvh используют углы Эйлера - конвертировать при записи из кватернионов в углы, а затем из углов в кватернионы для передачи думаю накладно, да и из-за множества математических операций в числах с запятой - неизбежна некоторая неточность.
    • У нас будет лицо - думаю использовать какой-то экран как для Raspberry Pi, типо такого. Размер 5" обусловлен размерами головы (напомните если кому интересны расчеты пропорций и массы частей, которые у меня лежат, но все никак руки не доходят их опубликовать) - в нашем случае 125х87,5х125 (ШхГхВ). Эмоции выводить - как вариант, какую-то отладочную информацию вертикально - думаю хватит разрешения.
    • У нас будут камеры, я рассматриваю модули с сенсорами глубины - Intel RealSense, как писал выше не договорился с "жабой" и не захотел тратить лишние $20 за версию PC-Stick с USB3, но вроде она заведется и на USB2 правда с меньшим разрешением. Возможно первое время буду использовать обычную usb-камеру (у меня есть с разрешением 1080p и линзой с 160 градусами обзора по диагонали) + MPU9250 для SLAM.
    • В качестве управления всем этим хозяйством и логикой как по мне рационально использовать какой-нибудь Game Engine. Выбор как по мне очевиден - Blender, но учитывая что его перестали поддерживать, есть мысль смотреть в сторону Unity.
    • Для коммуникаций со "спинными мозгами", а именно с МК (микроконтроллерами ESP8266) планирую использовать беспроводную сеть и протокол MQTT. Уж больно он мне понравился своей простотой.

    В итоге конечно смотрел в сторону Raspberry Pi Zero W за примерно $25, но покопав сайт бушного оборудования нашел устаревший  Intel® Compute Stick STCK1A32WFC за примерно $35. Разумеется выбор был в пользу последнего, кстати в предыдущем сообщении сделал ошибку, так как сам стик после установки на него Ubuntu server 20.04 лежит на полке и ждет своего часа. Процессор в стике Z3735F, а памяти оперативной 2 ГБ. Что-то у меня подозрения что малинка не справится с моими описанными выше хотелками особенно касается GE и компьютерного зрения, к тому же всегда что-то появится дополнительно что нужно будет обсчитывать и в этом случае более мощный CPU и больше памяти - мне только на руку.

     

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

     

     

    PXL_20210221_215351341.thumb.jpg.1f9e335622f39cd467b4ab1d270ea3bd.jpg


  4. 15 часов назад, priestov сказал:

    Специально зарегался на форуме ради этой темы. Очень мало инфы, особенно в русскоязычном сегменте, особенно в плане взаимозаменяемости сервоприводов. Я думаю изменять придётся не только места креплений, но и платы управления. Может есть смысл перейти на STM или на малинку с таким доработками? Но судя по расчетам, тело будет тоже пересчитано....

    В отношении МК думаю что более популярным будет что-то "ардуиноподобное" - я смотрю в сторону ESP8266. А вот в отношении мозгов долго думал и купил для старта бу-шный PC-Stick на Intel Atom X5-Z8350 с 4 ГБ ОЗУ и 32 ГБ SSD. Хотя потом уже понял что нужно было переплатить немного и купить с USB3 (у меня только USB2), так как модули компьютерного зрения с сенсорами глубины только USB3. 


  5. Математическая модель платформы Стюарта.

    Давайте реально рассчитаем нашу платформу для средней части туловища будущего робота. Ниже две вырезки из замечательной книги «Анатомия для скульпторов», которые отображают места и площади срезов в женском теле человека. Расстояния между зеленым и фиолетовыми срезами - равно примерно стандартной единице измерения человеческого тела (голова) - в нашем случае это 125 мм. (для робота ростом 1 м и идеальным соотношением голов к росту в 8 единиц).

    image.png.1ef1de5a60bd19fa8893cc2876cd90aa.pngimage.png.ee515dc374a5d1fd8254835374dc3d74.png

    Спасибо создателям этой книги  - в этом рисунке они постарались учесть пропорции и размеры по максимуму - и можно говорить что в фиолетовый и зеленый срезы можно примерно вписать окружность с диаметром 100 мм. Эти начальные параметры мы и берем за основу - расчетная высота нашей платформы будет 125, а расчетные окружности основной и подвижной плоскостей с диаметром 100 или радиусом 50 мм.

    image.png.a62c43be7f26057a1fde7cad7a09be70.png

    Получилось как то так. Угол между точками составляет 15° (где есть отрезок) и 105°. подвижная платформа смещена по оси Z на 60 градусов.

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

    • white_base_p;

    • white_move_p;

    • black_base_p;

    • black_move_p;

    • red_base_p;

    • red_move_p;

    • blue_base_p;

    • blue_move_p;

    • green_base_p;

    • green_move_p;

    • yelow_base_p;

    • yellow_move_p.

    Ну и соответственно отрезки:

    • white;

    • black;

    • red;

    • blue;

    • green;

    • yellow.

    Если посмотреть внимательней - для основы это трехмерные векторы с началом в точке O, которая будет являться у нас началом координат всей платформы и в этом случае искомые точки для базы у нас равны координатам векторов. Например на моем рисунке выше, где у есть обозначение длины отрезка этот вектор будет с координатами (50, 0, 0), и точка имеет эти координаты. Так как у нас точки все лежат на одной плоскости и не двигаются по оси Z - мы не берем это в расчет. Формулы для нахождения координат вектора при повороте на угол Ɵ ниже, знак выбирается в зависимости от системы координат - правосторонняя или левосторонняя, в формуле так же нужно использовать радианы, вместо градусов image.png.84d619094a87e6d832a4cca53486d9c6.png.

    image.png.4b93e6f3de833020b1ec20637a42302e.png

    image.png.6f6e4fdec6794df5f951ccf1b4fe8d67.png

    Забьем эти формулы в табличку и получим следующие значения  координат точек для базовой платформы.

     

    x

    y

    z

    angle

    white_base_p

    50,0000

    0,0000

    0,0000

    0

    black_base_p

    48,2963

    -12,9410

    0,0000

    15

    red_base_p

    -25,0000

    -43,3013

    0,0000

    120

    blue_base_p

    -35,3553

    -35,3553

    0,0000

    135

    green_base_p

    -25,0000

    43,3013

    0,0000

    -120

    yelow_base_p

    -12,9410

    48,2963

    0,0000

    -105

     

     

     

     

     

    blue_move_p

    -50,0000

    0,0000

    125,0000

    0

    green_move_p

    -48,2963

    12,9410

    125,0000

    15

    yellow_move_p

    25,0000

    43,3013

    125,0000

    120

    white_move_p

    35,3553

    35,3553

    125,0000

    135

    red_move_p

    12,9410

    -48,2963

    125,0000

    -105

    black_move_p

    25,0000

    -43,3013

    125,0000

    -120

     

    image.png.d06d669da9b92b26f6626dab855d1f5a.png

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

    image.png.945d53ea3ca621143b839405e82e9949.png

     

     

    x

    y

    z

    length

    white

    -14,6447

    35,3553

    125,0000

    130,7267

    black

    -23,2963

    -30,3603

    125,0000

    130,7267

    red

    37,9410

    -4,9950

    125,0000

    130,7267

    blue

    -14,6447

    35,3553

    125,0000

    130,7267

    green

    -23,2963

    -30,3603

    125,0000

    130,7267

    yelow

    37,9410

    -4,9950

    125,0000

    130,7267

     

    Ну вроде все правильно - у нас получилось что все отрезки в стартовом состоянии равны image.png.e02f246bf541843725bed71a193989f6.png131 мм.

    Посмотрим на чертеж линейных актюаторов из поднебесной.

    image.png.40125b8158567cc3a5d52d5693b234a7.png

    Китайцы делают их с ходом 10, 21, 30, 50 и 100 мм. Начальное состояние у нас должно быть для актюатора где-то не в самом начале, а примерно посередине, чтобы должна быть возможность хода в обе стороны. Таким образом для хода в 50 мм у нас получиться (для центра отверстий):

    image.png.41c629039933ed922139f513b12922c9.png;

    image.png.bb20f3213dd7088bc5d16a6c063d337e.png.

    Т.е. image.png.99963b0616f1f1957076b68d5d6513da.png131 мм. - как раз чуть больше середины:

    image.png.df33b07596db6e418e1555fa7ef80b98.png.

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

    С перемещением подвижной части все относительно просто - берем вектор image.png.62ae587154b72f39b11141b975c6b888.png, где image.png.941551b40f8d0af8002c784cb78503d4.png начальная точка с координатами , а image.png.1fb882dc67582564952cf7bf79e25ba5.png' конечная точка и перемещаем все наши точки по формуле:

    image.png.5dda4c487480eb9f705e57502fdeae9b.png

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

     

    x

    y

    z

    blue_move_v

    -50

    0

    0

    green_move_v

    -48,2963

    12,941

    0

    yellow_move_v

    25

    43,3013

    0

    white_move_v

    35,3553

    35,3553

    0

    red_move_v

    12,941

    -48,2963

    0

    black_move_v

    25

    -43,3013

    0

     

    Для поворота вектора кватернионом необходимо:

    1. Создать кватернион из нашего вектора, добавив к нему скалярную нулевую часть blue_move_q = (0, 50, 0, 0) (как пример). Кватренион состоит из скалярной части qw и векторной qx, qy, qz.

    2. Умножить наш кватернион поворота на созданный и затем умножить на сопряженный blue_move_q' = q blue_move_q • image.png.149ad8fa6a21a98130fdc5d78518431c.png. Таким образом мы применяем поворот, который описывает наш кватернион к вектору.

    3. Отбрасываем скалярную часть чтобы получить наш повернутый вектор blue_move_v'.

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

    image.png.87181dfb3511978c56c47d8185c1ab55.png

    Где image.png.b00989066da320463c545ddee2adf895.png - исходный вектор, image.png.5d1bfd585472e1e600a9b2cd1bd1691d.png - векторная часть кватерниона, image.png.929532896860ed784d0982ed258d0a3b.png - скалярная часть кватерниона, image.png.9d07cff120d95e98018c61a6ac23e767.png - произведение, • - скалярное произведение и image.png.1188c8f0bac057bc4459da637a5f5086.png - искомый вектор.

    Вернемся к нашей платформе, мы будем получать два кватерниона для робота - один говорит нам о повороте основы в глобальном пространстве, второй о повороте подвижной части. Для получения поворота подвижной части в координатах основы (то как повернуть подвижную часть нужно относительно координат основы) необходимо кватернион основы умножить на кватернион подвижной части и мы получим кватернион который описывает вращение как будто основа у нас неподвижна и находиться в центре координат. Формула умножения:

    image.png.12a428263fa8a07e87dcbeb9ba1b23ef.png;

    Где image.png.9411f9479095426e4754c769d1afcf7c.png - векторное произведение, а image.png.33b9d6529ae14cb485d8d6989fa87467.png - скалярное. Приводить полную формулу не буду - легко гуглиться ;)

    Итак, у нас есть кватернион поворота для локальной системы координат подвижной части платформы, базовый для расчета берем тождественный, с координатами (1, 0, 0, 0).

    Давайте разберем на примере что куда в табличках.

    Возьмем кватернион, который описывает в углах Эйлера поворот по всем осям на 15° - q(0.972, 0.145, 0.111, 0.145) и повернем векторы подвижной части платформы на него.

     

    x

    y

    z

    blue_move_v_q

    -46,665

    -15,704

    8,687

    green_move_v_q

    -48,307

    -3,316

    12,455

    yellow_move_v_q

    12,521

    47,511

    9,256

    white_move_v_q

    24,170

    43,486

    4,962

    red_move_v_q

    24,137

    -40,170

    -17,417

    black_move_v_q

    34,145

    -31,808

    -17,943

     

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

     

    x

    y

    z

    blue_move_p

    -46,665

    -15,704

    133,687

    green_move_p

    -48,307

    -3,316

    137,455

    yellow_move_p

    12,521

    47,511

    134,256

    white_move_p

    24,170

    43,486

    129,962

    red_move_p

    24,137

    -40,170

    107,583

    black_move_p

    34,145

    -31,808

    107,057

     

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

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

     

    w

    x

    y

    z

    q

    0,9723

    0,1452

    0,1114

    0,1452

    q_middle_norm

    0,9931

    0,0731

    0,0561

    0,0731

    q_middle

    1,9723

    0,1452

    0,1114

    0,1452

    q_base

    1,00

    0,00

    0,00

    0,00

    center_v

     

    0,00

    0,00

    125,00

    center_v_q

     

    15,26142

    -17,12509

    122,87726

    center_move_v

     

    15,26142

    -17,12509

    -2,12274

     

    Теперь можно рассчитать нужные нам точки для подвижной платформы, векторы от нижней к верхней платформе и их модули (т.е. длину отрезков).

     

    x

    y

    z

    length

    white

    -10,5906

    26,3752

    127,8356

    130,9571

    black

    1,1160

    -35,9661

    104,8885

    110,8891

    red

    64,4099

    -13,9746

    105,4204

    124,3277

    blue

    3,9661

    2,4949

    131,6004

    131,6838

    green

    -23,2964

    -63,7759

    135,3758

    151,4486

    yelow

    40,7022

    -17,9041

    132,1429

    139,4237

     

    Ну вроде как вкладываемся в ход актюаторов ;) В общем как-то так.

    P.S. Пошу прощения, делал все в текстовом редакторе - немного поломалась разметка ;)

    image.png

    • Upvote 3

  6. Итак, пару дней назад забрал посылку с парой мембранных потенциометров. Заказать их и получить тот еще квест ;)
    Поломав голову пару дней - выбрал модельку TSP-L-0050-103-1%-RH, ссылка на DigiKey, по нескольким причинам:

    • общая ширина потенциометра 10 мм, а активная 6 мм - то есть он должен полностью по ширине поместиться в актюаторы;
    • общая толщина чуть менее 0,5 мм - он поместиться внутри на стенке металлического кожуха и не будем ничему мешать.

    Решил парочку заказать - как раз для 2-х актюаторов (сломать - потерять).
    В Китае для заказа недоступны доступны только длиной, но есть на вышеупомянутом DigiKey и Mouser. Заказ через посредников, которые привезут что угодно откуда угодно, обошелся для 2-х потенциометров обошелся в две цены. С другой стороны если заказывать таких устройств с 10-к, то цена доставки будет та же и тогда уже наценка будет не 100 а 20 %.

    vmwp3qSagBDwJcknV2jmCHKx6bEI4e1bzzm7aytw-sKPSBHJ--tf5P3Gl15Hv3eGlOeYNuCy_sPP37pDFcHJD4HSCdju5wyU1EwQC47uWi8bq0mfL6IHJqbqtdu_NNUSSWjul7hj

    Настала очередь экспериментов.
    Подключил по простой схеме: +V к 5V, GND к GND, PIN2 к A0.
    Набросал простенький скетч для контроллера:

    #define PIN_POT A0
     
    void setup()
    {
      Serial.begin(9600);
      pinMode(PIN_POT, INPUT);
    }
    void loop(){
      int rotat;
      rotat = analogRead(PIN_POT);
      Serial.println(rotat);
    }

    Вывод радует. Все работает. Обнаружились пару интересных особенностей:

    • если ничто не давит на потенциометр - значения скачут случайным образом;
    • если давить сразу в нескольких местах (у меня под рукой оказалась вилка :) ) - показывает что-то среднее между всеми, в моем случае 4-мя, местами.
       
    • Upvote 2

  7. В общем и целом пару дней ломал голову как прикрутить какой-то контроль хода линейного актюатора. Пришел к следующему неутешительному выводу: использовать энкодеры будет проблематично, хотя точность при этому будет более чем замечательная. Для того чтобы использовать моторчики с энкодерами, нужно на каждый линейный актюатор вешать отдельный микроконтроллер и делать потом на каком-то протоколе обмен между ними - сильно усложнит всю систему, а может и нет - нужно попробовать. Основная проблема - когда прилетает импульс от датчика Холла, их обязательно нужно обрабатывать, а таких датчиков два и скорость вращения двигателей без нагрузки 15000 об/мин. Думаю попробовать пока собрать для теста из подручных материалов стенд и посмотреть как что к чему зачем.

    Изучив более детально вышеописанное начал смотреть в сторону механического контроля, что тоже не особо радует. Наверно самым правильным будет использование мембранного потенциометра внутри корпуса производства Spectra Symbol, и по размерам очень подходит. В этом случае одним контроллером можно будет контролировать довольно много двигателей через драйверы и ход актюаторов по аналоговому сигналу. Буду парочку заказывать, а пока жду - соберу тест на энкодерах и отрисую в Blender актюаторы для определения их роли.

    • Upvote 1

  8. 1 час назад, StranikS_Scan сказал:

    А че в Китае нет дешевых комплектующих? Вроде все эти моторчики - дешевая рассыпуха?

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

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


  9. Основная проблема при моделировании моего проекта - линейные актюаторы. Я собираюсь эти устройств аиспользовать в нескольких частях будущего робота.

    • средний отдел туловища;
    • верхний отдел туловища;
    • шея;
    • голень + стопа.

    Ища в интернет что-то что мне подойдет по размерам, вольтажу и мощности было найдено несколько вариантов, которые не особо меня устраивали по цене.

    • Actuonix - по цене от $70, имеются варианты с для Arduino с управлением через стандартную библиотеку для сервоприводов, имеются варианты с концевиками, со встроенным потенциометром и микроконтроллером, который можно настроить на определенную логику работы.
    • Morai Motion - по цене от $65.
    • Китай - по цене от $33, но только с концевыми выключателями.

    Необходимы были актюаторы с обратной связью, ведь для параллельных манипуляторов нужно знать реальную длину в настоящий момент. Хотя можно и обойтись косвенным контролем, например датчики вращения в пространстве.
    Ломая голову и договариваясь с внутренней жабой, я для себя решил попробовать сделать актюаторы самостоятельно и даже заказал двигателей, линейных потенциометров, винтовых валов с гайками и соединительных муфт (для соединения двигателя с валом). Остальное думал спроектировать в 3D-редакторе, распечатать и затем собрать. Но пока ждал посылки, китайцы начали продавать линейные актюаторы по цене чуть больше $20 за штуку, что сводило на нет, все мои изыскания в экономии.
    Основная идея - заменить внутренний двигатель на другой с нужным редуктором (побыстрее) и энкодером на датчиках Холла, добавить контроллер и драйвер управления двигателями.
    Вот в четверг получил посылку с двумя такими (один сломать, второй потерять).

    IMG_20200910_112805.thumb.jpg.b5c650fc88dd1d2c05f72dec19a838f4.jpg

    Заказывал со скоростью 30 мм/с и 50 мм ходом. Масса оказалась 43 грамма (обычные кухонные весы с погрешностью 10 грамм)

    Ну чтож глянем что внутри?

    IMG_20200912_133650.thumb.jpg.03793c6371a4ed960c8d8d982a7cf8d5.jpg

    IMG_20200912_133735.thumb.jpg.f198c2d15ded712ff04b955a8ebbe01a.jpg

    IMG_20200912_133920.thumb.jpg.a9fe64b70cac0148650837bfcbb984bc.jpg

    Для сравнения положил моторчик с энкодером.

     

    Соответственно что теперь имеем:

    • Перепаять концевики можно и нужно на моторчик с энкодером.
    • Нужно распечатать пластиковый новый корпус, чтобы моторчик с энкодером поместился.
    • Контроллер и драйвер думаю использовать все таки внешние и не прятать их в корпус, у меня вроде в голове складывается что актюаторов будет четное количество в местах установки, соотвественно можно сделать драйвер и контроллер на пару. Хотя тут нужно подумать - потому как сразу возникает вопрос с протоколом соединения.
    • Upvote 2

  10. С одной стороны я очень понимаю команду Poppy, взять готовые сервоприводы которые по максимуму удовлетворяют требованиям. Написать программную прослойку, чтобы сделать работу c сервоприводами просто и доступно каждому начинающему первые шаги в программировании на python. Но конечный результат получается очень дорогой, тем более для начинающих робототехников, даже для ребят из Европы / Америки / Японии. Чуть более 9k€ за комплект с готовыми напечатанными частями и почти 6,5k€ без них - по моему мнению они оборзели дороговато, и это не учитывая стоимость доставки и таможенных сборов - стоимость посылки попадает под налог. Кстати этот момент обсуждали на официальном форуме - использовать более доступные корейские сервоприводы HerkuleX, которые практически аналоги американских Dynamixel.

     

    509982662_2020-09-1212-16-14.thumb.png.9b14033abc2a605ce3621314d77337c4.png

     

    Dynamixel Poppy
    На GitHub есть официальный репозиторий с инструкциями по сборке, программным обеспечением и прочим. Ребята огромные молодцы, что сделали все настолько открыто и доступно каждому. Изучив все как следует можно понять компоновку этого робота, из чего и как он собирается и управляется.

     

    • 19 шт. MX-28AT - двухосный сервопривод с размерами 35,6 х 50,6 х 35,5 мм, массой 77 гр, крутящий момент 2,5 Н*м и скоростью поворота 55 об/мин, точность 0,09°. Стоимость в США $239.90 за один.
    • 4 шт. MX-64AT - двухосный сервопривод с размерами 40.2 х 61.1 х 41 мм, массой 135 гр, крутящий момент 6 Н*м и скоростью поворота 63 об/мин, точность 0,09°. Стоимость в США $309.90.
    • 2 шт. AX-12A - двухосный сервопривод с размерами 32 х 50 х 40 мм, массой 55 гр, крутящий момент 1,5 Н*м и скоростью поворота 59 об/мин, точность 0,3°. Стоимость в США $44.90.

    Стоимость всех остальных компонентов мы пока не рассматриваем, но как пример - 10 соединительных кабелей длиной 200 мм для этих сервоприводов стоят в США $14.40.

     

    HerkuleX Poppy
    Если есть голова, желание и умение работать с 3-х мерным редактором, можно немного переделать части робота для печати под другие модели серв. Так же, скорее всего, нужно будет переписать библиотеку Pypot или написать свою для использования моделек приводов этого производителя. Аналоги:

    • 19 шт. HerkuleX DRS-0201 (официальный сайт не работает даю ссылку на интернет магазин) - двухосный сервопривод с размерами 44,5 x 24 x 32 мм, массой 60 гр, крутящий момент 24 кгс*см (2,35 Н*м) и скоростью поворота за 0,147 с на 60° (68 об/мин), точность 0,325°. Стоимость в $131.95 за один.
    • 4 шт. HerkuleX DRS-0601 - двухосный сервопривод с размерами 56 x 35 x 38 мм, массой 123 гр, крутящий момент 77 кгс*см (7,55 Н*м) и скоростью поворота за 0,162 с на 60° (62 об/мин), точность 0,176°. Стоимость $270.00.
    • 2 шт. HerkuleX DRS-0101 - двухосный сервопривод с размерами 45 x 24 x 31 мм, массой 45 гр, крутящий момент 12 кгс*см (1,18 Н*м) и скоростью поворота за 0,166 с на 60° (60 об/мин), точность 0,325°. Стоимость $39.50.

    И в случае использования сервоприводов этого производителя у нас появляется чуть больше выбора - есть еще одна промежуточная модель HerkuleX DRS-0401 - двухосный сервопривод с размерами 56 x 35 x 38 мм, массой 123 гр, крутящий момент 52 кгс*см (5,01 Н*м) и скоростью поворота за 0,162 с на 60° (62 об/мин), точность 0,176°. Стоимость $229.00. Для того чтобы понимать нужна ли она нам, нужно пересчитать всю механику робота, но мы эти позже займемся.

     

    Голь на выдумку хитра
    Вспоминается монолог уважаемого Жванецкого М.М. про "очень больших раков по 5 рублей вчера и очень маленьких сегодня по 3 рубля". Как бы не хотелось начать процесс строительства своего робота, но вышеозначенные цены рубят на корню все начинания, если конечно у вас зарплата не с 5, а лучше 6 нолями без копеек. И за последний год в Китае, на AliExpress, начали продавать сервоприводы с похожими характеристиками, если взять китайские, как аналоги для Poppy, то получится:

    • 19 шт. RDS3225 - двухосный сервопривод с размерами 40 x 20 x 40,5 мм, массой 60 гр, крутящий момент 24 кгс*см (2,35 Н*м) и скоростью поворота за 0,19 с на 60° (53 об/мин), точность 0,135°. Стоимость примерно $16 за один.
    • 4 шт. RDS5160 - двухосный сервопривод с размерами 65 х 30 х 48 мм, массой 162 гр, крутящий момент 65 кгс*см (6,37 Н*м) и скоростью поворота за 0,15 с на 60° (67 об/мин), точность 0,135°. Стоимость примерно $33.00.
    • 2 шт. RDS3115 - двухосный сервопривод с размерами 40 x 20 x 40,5 мм, массой 60 гр, крутящий момент 12 кгс*см (1,18 Н*м) и скоростью поворота за 0,16 с на 60° (63 об/мин), точность 0,135°. Стоимость примерно $12.00.

    Как и в предыдущем случае есть сервопривод RDS3235 с размерами как 3225/3115, но крутящим моментом в 32 кгс*см (3,14 Н*м) и скоростью поворота за 0,12 с на 60° (83 об/мин). Стоимость примерно $26.00. Разумеется, в этом случае не придется создавать свою библиотеку для прямого управления сервами - они просто не имеют никакого интерфейса, а делать все максимально "хардкорно", через микроконтроллер и драйвер. Так же нужно будет изменить части робота для 3D-печати, и раз уж менять, то почему бы не пересмотреть компоновку - именно эту картинку можно видеть в самом начале.

    Отдельно хочу обратить внимание на точность позиционирования для китайских серв - указанные значения вычислены, и скорее всего очень далеки от истины. Поворот сервопривода задается длиной импульса от 500 то 2500 нс, а рабочий угол составляет 270°. Значения, которые я указал в характеристиках - это угол, разделенный на разницу в нс. Уверен что реальная погрешность от задаваемых импульсов и получаемых углов хорошо если составит несколько градусов или можно будет уложить это в какую-то формулу. Китай такой Китай, но разница в цене играет свою роль.

     

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

    • DS5160 - аналог RDS но с одной осью, 2 шт. x $32.00 = $64.00 (нижняя часть туловища).
    • RDS5160 - 2 шт. x $33.00 = $66.00 (бедра).
    • DS3235 - 8 шт. x $25.00 = $200.00 (поворот бедра, поворот голени, лопатки, поворот плеча).
    • RDS3235 - 4 шт. x $25.00 = $100.00 (колени, плечи).
    • RDS3225 - 2 шт. x $16.00 = $32.00 (локти).
    • DS3115 - 1 шт. x $13.00 = $13.00 (поворот шеи).
    • RDS3115 - 2 шт. x $13.00 = $26.00 (шея).

    Итого всего затрат получится ориентировочно $501.00. Если это сравнить с Dynamixel ($5487,50) или HerkuleX ($3666,05) сразу как-то становится легче на душе ;)

    • Upvote 3

  11. Давайте сначала разберемся что такое человеческое тело, его части и на какие параметры нужно обращать внимание.

    Мы живем в 3-х мерном мире, вообще вроде как считается, что четвертое измерение - время, но сейчас нам данный факт не интересен. Значит и само тело робота имеет размер, и все его составные части тоже. Которые под определенными углами соединены в состоянии покоя и имеют ограниченные степени свободы в отношении друг друга. Степеней свободы может быть не более 6. Т.е. если взять 3-х мерную систему координат - из школьного курса помнятся оси обозначенные X, Y и Z, то получиться что степени свободы - это перемещения вдоль осей и вращения вокруг них. Таким образом обязательно необходимо разделить робота на части, которые будут иметь размеры и степени свободы максимально приближенные к человеку в трех измерениях и 6 степенях относительно друг друга.

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

    12027_html_m428cfc4e.png.0d20ee47aa3d983254077c913589e1dd.png12027_html_4f8138ac.png.8178d8277f9df21f7a813878d7fae9cc.png
    Сегментирование тела человека: а) сегменты и их относительный вес; б) антропометрические точки границ сегментов и положение их центров масс на продольных осях центров масс сегментов на их продольных осях (в % к длинам сегментов) и относительные массы сегментов.
    В качество литературы для более глубокого погружения в тему рекомендую две - которые повлияли на мое понимание вышесказанного в отношении человеческого тела:

    • Биомеханика. Дубровский В.И., Федорова В.Н.
    • Анатомия для скульпторов. Улид Заринс и Сандис Кондратс.
       

    inMoov
    Очень правильная и сильная идея, которая заложена в этот проект, что строительство робота доступно всем желающим и интересующимся. То что используются повсеместно доступные и недорогие компоненты сервоприводы, принтер, usb-камеры, Ардуино и Кинект. Свободный робот использует свободное программное обеспечение. Он полностью смоделирован в Blender, используются открытые и доступные языки: Python, JavaScript. Робот как социальный проект. По задумке он наверное и не должен был ходить. Общение с людьми - вот его цель. Использование так называемого "несущего корпуса" с одной стороны скрывает хаос проводов, с другой позволяет меньше думать о компоновке. Использование параллельных манипуляторов и линейных актюаторов.

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

     

    Poppy
    Желание полностью соответствовать кинематике человеческого тела изначально. Единый программный интерфейс управления. Небольшие размер и соответственно масса. Для такого робота достаточно не сильно мощных серовоприводов. Проектировщики думают его научить ходить.

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

     

    Свой вариант
    Наконец я озвучу свою идею что и как я буду делать.

    • Определенно робота в полный размер делать дорого и бессмысленно. Таким образом наверное определю для себя размер в 1 метр. Он будет выше французского Poppy, но ниже inMoov. Если посмотреть видео с Poppy понятно что мощности сервоприводов, которые данная команда рекомендует - для нашей цели должно хватить.
    • Массу робота я пока определил в 5 кг. Разумеется все части должны быть в правильных человеческих пропорциях. Глядя на Poppy - видно что есть большое недовес - а значит есть где разместить аккумуляторы.
    • Использование недорогих сервоприводов, как это делал создатель inMoov. Я уже сделал таблицу сравнительную сервоприводов которые являются основой для Poppy с китайскими аналогами - позже я её опубликую. Разница в стоимости в несколько раз, хотя мы при этом и теряем обратную связь и простоту управления.
    • Использование параллельных манипуляторов и линейных актюаторов в частях, что я выше же написал. Тут придется немного заморочиться, так как готовых изделий я не нашел, таким образом 3D-печать, дешевые комплектующие и смекалка - наше все.

    Таким образом робот должен быть недорогим, подвижным и биомеханикой быть как человек.

    • Upvote 3

  12. Всем привет!

    Как же я скучал за родным ламповым танковым форумом :)

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

    Не знаю, что из моей затеи может получится - но давайте по порядку.

     

    Почему именно человекоподобный робот.
    Потому что это очень круто! Данная идея ко мне пришла когда я уже собрал параллельный манипулятор и встал вопрос: "А что дальше?". Не знаю как кому, но мне больше нравиться именно сочетание движущихся частей с программным кодом, то есть механика + электроника + программирование. Наверно именно это и является моим хобби, вот эта связка. Именно в тот момент я наткнулся на пару ресурсов в интернете, которые и повлияли на меня, и именно поэтому вы сейчас читаете это. Интересно что оба этих ресурса родом из Франции.

    inMoov - открытый проект по созданию человекоподобного робота с помощью 3D-печати на свободно-доступных компонентах дизайнера и скульптора Gael Langevin.

    Poppy Humanoid - так же открытый проект робота, над которым вначале работали Matthieu Lapeyre (механика и дизайн), Pierre Rouanet (программное обеспечение) и Jonathan Grizou (электроника).

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

     

    Зачем изобретать свой "велосипед"
    Казалось бы - берешь инструкции от этих талантливых людей и закупаешь нужные сервоприводы и платы, печатаешь на 3D-принтере нужные части и вперед! Повторение чужого опыта оно такое - не нужно ведь наступать на чужие грабли, а после окончания создания по руководству приходит понимание, что можно улучшить и как. Мне почему-то кажется, что и создателям этих роботов эти идеи так же пришли в голову, но на переделку или адаптацию по новым улучшениям может просто не хватить сил.

    Поэтому моя идея следующая, берем лучшее, что есть в этих проектах и создаем свое.

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

     

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

    • Upvote 3

  13. Начинают вырисовываться будущие "копания":

    1. Управление движением - 4 датчика MPU-9250. Два на ноги, один на поясницу и один на грудь или спину подключатся будут проводом к мастер-контроллеру. Ноги - отслеживание бега и ходьбы вперед-назад-лево-право. Поясница - примерно центр тяжести человека, отслеживание направления движением, прыжок и приседание. Спина/грудь (пока не знаю как будет удобнее) - выглядывание из-за угла и отслеживание положения для использования оружия.
    2. Управление оружием - 6 датчиков MPU-9250 на руки, кисть-плечо-предплечье лево-право. Само оружие - контроллер Wii Remote + Nunchuk + Wii Motion Plus + Zapper. Светодиодное окружение для точного позионирования оружия - усеченный икосаэдр собранный из гимнастических обручей, креплений для пластиковых труб и светодиодами 850 нм. Датчики на руках + датчики на спине/груди и пояснице позволят примитивно взаимодействовать с окружаюм миром в игре, открывать двери, толкать предметы и т.п. Так же будет точное позиционирование в пространстве оружия, можно будет держать в любой руке (наверное выбор кнопкой), бросать гранаты свободной рукой. Контроллер за счет встроенных двух акселерометров и гироскопа, ИК-сенсора (отслеживание до 4-х светодиодов с разрешением 1024х768) и вибродвигателя должен довольно правильно эмулировать стрельбу и будет подключем с помощью этого оборудования к мастер-контроллеру.
    3. В качестве тестовой среды использовать Blender, в качестве игры покопать в сторону Team Fortress 2.

  14. В 08.10.2017 в 19:34, kharlashkin сказал:

    Получается при 50 fps не успевает передать на скорости 19200 бод/сек

    Нужно просто передавать не текст, а сами данные - тот же float занимает всего 4 байта для Arduino. Почему никто не подсказал...

    • Upvote 1

  15. Только что, Mr 13 сказал:

    @kharlashkin а какая конечная цель? Попробовать себя в разработке для VR? Может стоит посмотреть на соответствующие игровые движки, а не модифицируемые игры?

    В теме про Arduino я довольно долго копался с датчиками положения в пространстве, по наводке @Pavel3333. На выходных случилось, что мне стукнули с вопросом об использовании моего опыта и наработок в FPS для захвата движения игрока в игру. Так же когда-то мои и уважемого @inj3ct0r наработки по вибрации в WoT геймпаду свели меня с человеком, который для себя делал комнату VR по-стрелять в Xonotic. Хочется попробовать применить этот опыт в готовом проекте.

    Разумеется, можно в том же Blender сделать демо сцену с мишенями - думаю как промежуточный этап сойдет. Но хочется видеть более реальную конечную цель - чтобы наработки ушли в массы, а не остались мертворожденным DIY проектом.

    24 минуты назад, Mr 13 сказал:

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

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

    Например взять тот же Source от Valve, на нем есть довольно много игр ААА класса - есть документация и SDK, даже python прикручен (правда пока не смотрел как). И решив данную проблему для Source (но копая в направлении Portal) можно убить "двух зайцев".

    С другой стороны: "за двумя погонишься - ни одного не поймаешь". Данная тема лишь попытка узнать у сообщества - может уже существует игра на движке, в которую это можно "запилить" с наименьшими усилиями. Потому как про тот же Xonotic до сегодняшнего утра я вообще не слышал ;)


  16. Привет всем.

     

    Посоветуйте игру, что нужно:

    1. Возможность написания любых модов на управление, внутренний геймплей и т.п. Карты, текстуры и всякие красивости не интересуют. Желательно наличие подробных инструкций для начинающих и как можно более обширную документацию.
    2. В жанре головоломки от первого лица (англ. First Person Puzzle), как Portal/Portal2 с оружием - как холодное так и/или стреляющее.
    3. Поддержка VR, пусть даже в зачаточном состоянии. Имеется ввиду возможность отвязать камеру от прицела и разделить под VR, возможность отвязать перемещения персонажа в пространстве от направления камеры, возможность отвязать прицел и оружие от первых двух пунктов.
    4. Python, боюсь не смогу осилить чет более сложное.

    Саму документацию на Portal и Portal2 по модам уже смотрю, но чет "меня терзают смутные сомнения", что учитывая огромную популярность данных игр нормальных модов для игры в VR нет.


  17. В 06.10.2017 в 15:55, kharlashkin сказал:

    вопрос организации проводной сети

    Чет я в смятении... Проверял передачу одного текстового сообщения вида кватернион с точностью 6 цифр после запятой. Получается при 50 fps не успевает передать на скорости 19200 бод/сек, а у меня таких датчиков в перспективе будет не менее 16-ти. Думаю разделить на 3 ветки датчики (левая, правая и центральная стороны), каждую завернуть в свой порт. Будет ли в таком случае успевать мастер-контроллер собирать данные и передавать по Bluetooth?

    • Upvote 1

  18. Может кто уже спрашивал - лень искать ;)

    Нельзя ли из уведомлений убрать сообщения о том, что кто-то поставил +/-, ну или где можно это отключить? Отвлекает как-то звуком и информация не имеет ценности как таковая...

    Нашел в настройках. Может по-умолчанию выключить?


  19. Есть вопрос к сообществу, сам уже гуглил, пока думаю над правильным ответом.

    Учитывая как и что я собираюсь делать с несколькими датчиками, а именно если для каждого датчика вешать свой контроллер и на нём обрабатывать нужную математику, то встанет вопрос организации проводной сети с мастер и ведомыми контроллерами, смотрю пока в сторону RS-485. У кого есть какие мысли по этому поводу?

    Ещё один вопрос встал - мало крутить "конечностями" в пространстве, неплохо бы ещё учитывать перемещения в нём, в принципе  можно получать кроме кватерниона данные об ускорении датчика из данных гироскопа и акселерометра и на базе этих векторов высчитывать новые расстояния и координаты перемещения от начальных. Опять же - совет нужен.

    • Upvote 2

  20. 15 часов назад, Steel10 сказал:

    значит чему то научился? Может я не так сделал?

    Где-то здесь на форуме есть фраза, что в случаях, на который Вам указал @StranikS_Scan, проще написать свой мод "с нуля", чем пытаться расковырять защищенный.


  21. Долго возился с привязкой получаемого кватерниона с "костью" головы в Blender - как-то все запутанно там. Кость имеет свои координаты, получаемые командой:

    bpy.data.armatures['Armature'].bones['head'].matrix.to_quaternion() # Blender Render

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

    В общем, идет работа помаленьку.

    • Upvote 1
×
×
  • Create New...