Jump to content
Korean Random
kharlashkin

Делаем человекоподобного робота

Recommended Posts

Всем привет!

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

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

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

 

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

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

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

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

 

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

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

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

 

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

  • Upvote 3

Share this post


Link to post

Short link
Share on other sites

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

Мы живем в 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-печать, дешевые комплектующие и смекалка - наше все.

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

Edited by kharlashkin
  • Upvote 3

Share this post


Link to post

Short link
Share on other sites

С одной стороны я очень понимаю команду 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) сразу как-то становится легче на душе ;)

Edited by kharlashkin
  • Upvote 3

Share this post


Link to post

Short link
Share on other sites

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

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

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

  • 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

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

 

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

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

Share this post


Link to post

Short link
Share on other sites

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

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

Share this post


Link to post

Short link
Share on other sites
1 час назад, StranikS_Scan сказал:

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

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

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

Share this post


Link to post

Short link
Share on other sites

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

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

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Итак, пару дней назад забрал посылку с парой мембранных потенциометров. Заказать их и получить тот еще квест ;)
Поломав голову пару дней - выбрал модельку 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-мя, местами.
     
Edited by kharlashkin
  • Upvote 2

Share this post


Link to post

Short link
Share on other sites

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

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

Edited by kharlashkin
  • Upvote 3

Share this post


Link to post

Short link
Share on other sites
12.09.2020 в 20:08, kharlashkin сказал:

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

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

Share this post


Link to post

Short link
Share on other sites
15 часов назад, priestov сказал:

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

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

Share this post


Link to post

Short link
Share on other sites
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

Edited by kharlashkin

Share this post


Link to post

Short link
Share on other sites

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

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...