kharlashkin Posted September 10, 2020 Share Posted September 10, 2020 Всем привет! Как же я скучал за родным ламповым танковым форумом :) Во-первых меня все время не покидает ощущение, что все мои хоббийные достижения так или иначе с этим форумом связаны довольно сильно. И те несколько лет, что я не вел активность здесь - движения вперед сильно нет. Именно поэтому хочу вернуться сюда и буду стараться как можно активнее быть участником форума или формучанином. Не знаю, что из моей затеи может получится - но давайте по порядку. Почему именно человекоподобный робот.Потому что это очень круто! Данная идея ко мне пришла когда я уже собрал параллельный манипулятор и встал вопрос: "А что дальше?". Не знаю как кому, но мне больше нравиться именно сочетание движущихся частей с программным кодом, то есть механика + электроника + программирование. Наверно именно это и является моим хобби, вот эта связка. Именно в тот момент я наткнулся на пару ресурсов в интернете, которые и повлияли на меня, и именно поэтому вы сейчас читаете это. Интересно что оба этих ресурса родом из Франции. inMoov - открытый проект по созданию человекоподобного робота с помощью 3D-печати на свободно-доступных компонентах дизайнера и скульптора Gael Langevin. Poppy Humanoid - так же открытый проект робота, над которым вначале работали Matthieu Lapeyre (механика и дизайн), Pierre Rouanet (программное обеспечение) и Jonathan Grizou (электроника). Оба проекта однозначно круты, и главная мысль от детального ознакомления с ними - это реально можно сделать и нужно делать! Зачем изобретать свой "велосипед" Казалось бы - берешь инструкции от этих талантливых людей и закупаешь нужные сервоприводы и платы, печатаешь на 3D-принтере нужные части и вперед! Повторение чужого опыта оно такое - не нужно ведь наступать на чужие грабли, а после окончания создания по руководству приходит понимание, что можно улучшить и как. Мне почему-то кажется, что и создателям этих роботов эти идеи так же пришли в голову, но на переделку или адаптацию по новым улучшениям может просто не хватить сил. Поэтому моя идея следующая, берем лучшее, что есть в этих проектах и создаем свое. Да - будет много граблей, на которые я наступлю самостоятельно.Да - "свет в конце тоннеля" в этом случае светить очень долго еще будет в спину.Да - придется решить очень много задач по математике, программированию, механике, электронике и т.д. Но разве не за этим у людей есть хобби? Именно из-за этого и хочется стартовать данный проект и закончить его в обозримом будущем. 3 @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted September 10, 2020 Author Share Posted September 10, 2020 (edited) Давайте сначала разберемся что такое человеческое тело, его части и на какие параметры нужно обращать внимание. Мы живем в 3-х мерном мире, вообще вроде как считается, что четвертое измерение - время, но сейчас нам данный факт не интересен. Значит и само тело робота имеет размер, и все его составные части тоже. Которые под определенными углами соединены в состоянии покоя и имеют ограниченные степени свободы в отношении друг друга. Степеней свободы может быть не более 6. Т.е. если взять 3-х мерную систему координат - из школьного курса помнятся оси обозначенные X, Y и Z, то получиться что степени свободы - это перемещения вдоль осей и вращения вокруг них. Таким образом обязательно необходимо разделить робота на части, которые будут иметь размеры и степени свободы максимально приближенные к человеку в трех измерениях и 6 степенях относительно друг друга. Следующий параметр который является тоже одним из основных является масса и связанные с нею центр тяжести и вес. Тут вроде как все должно быть понятно - каждая часть робота должна иметь какую-то массу, и по моему мнению она должна быть пропорциональна подобной человеческой части. Сегментирование тела человека: а) сегменты и их относительный вес; б) антропометрические точки границ сегментов и положение их центров масс на продольных осях центров масс сегментов на их продольных осях (в % к длинам сегментов) и относительные массы сегментов. В качество литературы для более глубокого погружения в тему рекомендую две - которые повлияли на мое понимание вышесказанного в отношении человеческого тела: Биомеханика. Дубровский В.И., Федорова В.Н. Анатомия для скульпторов. Улид Заринс и Сандис Кондратс. inMoov Очень правильная и сильная идея, которая заложена в этот проект, что строительство робота доступно всем желающим и интересующимся. То что используются повсеместно доступные и недорогие компоненты сервоприводы, принтер, usb-камеры, Ардуино и Кинект. Свободный робот использует свободное программное обеспечение. Он полностью смоделирован в Blender, используются открытые и доступные языки: Python, JavaScript. Робот как социальный проект. По задумке он наверное и не должен был ходить. Общение с людьми - вот его цель. Использование так называемого "несущего корпуса" с одной стороны скрывает хаос проводов, с другой позволяет меньше думать о компоновке. Использование параллельных манипуляторов и линейных актюаторов. Минусы, по моему мнению. Он огромный. Желание сделать пусть и демонстрационного робота полноразмерным, накладывает огромные ограничения на биомеханику. Нужны мощные сервоприводы, нужно более надежно печатать, что утяжеляет части и нужны ещё более мощные сервоприводы. Он не двигается даже отдаленно напоминая человека. Т.е. никто не думал об изначальных углах и поворотах частей. За счёт несколько хаотичного наполнения сервоприводами получилось такое же управление - сложно заливать логику работы в контроллер, нет какого-то соответствия и программного интерфейса. Poppy Желание полностью соответствовать кинематике человеческого тела изначально. Единый программный интерфейс управления. Небольшие размер и соответственно масса. Для такого робота достаточно не сильно мощных серовоприводов. Проектировщики думают его научить ходить. Минусы. Он очень дорогой для самостоятельной сборки. Недостаточно продуманная, как по мне, компоновка. Я думаю нужно было в средней части робота где центр тяжести (средний отдел туловища), а также в голени и ключица + лопатка (присоединение стопы и плеча) использовать параллельные манипуляторы с линейными актюаторами. Свой вариант Наконец я озвучу свою идею что и как я буду делать. Определенно робота в полный размер делать дорого и бессмысленно. Таким образом наверное определю для себя размер в 1 метр. Он будет выше французского Poppy, но ниже inMoov. Если посмотреть видео с Poppy понятно что мощности сервоприводов, которые данная команда рекомендует - для нашей цели должно хватить. Массу робота я пока определил в 5 кг. Разумеется все части должны быть в правильных человеческих пропорциях. Глядя на Poppy - видно что есть большое недовес - а значит есть где разместить аккумуляторы. Использование недорогих сервоприводов, как это делал создатель inMoov. Я уже сделал таблицу сравнительную сервоприводов которые являются основой для Poppy с китайскими аналогами - позже я её опубликую. Разница в стоимости в несколько раз, хотя мы при этом и теряем обратную связь и простоту управления. Использование параллельных манипуляторов и линейных актюаторов в частях, что я выше же написал. Тут придется немного заморочиться, так как готовых изделий я не нашел, таким образом 3D-печать, дешевые комплектующие и смекалка - наше все. Таким образом робот должен быть недорогим, подвижным и биомеханикой быть как человек. Edited September 12, 2020 by kharlashkin 3 @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted September 12, 2020 Author Share Posted September 12, 2020 (edited) С одной стороны я очень понимаю команду Poppy, взять готовые сервоприводы которые по максимуму удовлетворяют требованиям. Написать программную прослойку, чтобы сделать работу c сервоприводами просто и доступно каждому начинающему первые шаги в программировании на python. Но конечный результат получается очень дорогой, тем более для начинающих робототехников, даже для ребят из Европы / Америки / Японии. Чуть более 9k€ за комплект с готовыми напечатанными частями и почти 6,5k€ без них - по моему мнению они оборзели дороговато, и это не учитывая стоимость доставки и таможенных сборов - стоимость посылки попадает под налог. Кстати этот момент обсуждали на официальном форуме - использовать более доступные корейские сервоприводы HerkuleX, которые практически аналоги американских Dynamixel. 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 September 12, 2020 by kharlashkin 3 @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted September 12, 2020 Author Share Posted September 12, 2020 (edited) Основная проблема при моделировании моего проекта - линейные актюаторы. Я собираюсь эти устройств аиспользовать в нескольких частях будущего робота. средний отдел туловища; верхний отдел туловища; шея; голень + стопа. Ища в интернет что-то что мне подойдет по размерам, вольтажу и мощности было найдено несколько вариантов, которые не особо меня устраивали по цене. Actuonix - по цене от $70, имеются варианты с для Arduino с управлением через стандартную библиотеку для сервоприводов, имеются варианты с концевиками, со встроенным потенциометром и микроконтроллером, который можно настроить на определенную логику работы. Morai Motion - по цене от $65. Китай - по цене от $33, но только с концевыми выключателями. Необходимы были актюаторы с обратной связью, ведь для параллельных манипуляторов нужно знать реальную длину в настоящий момент. Хотя можно и обойтись косвенным контролем, например датчики вращения в пространстве. Ломая голову и договариваясь с внутренней жабой, я для себя решил попробовать сделать актюаторы самостоятельно и даже заказал двигателей, линейных потенциометров, винтовых валов с гайками и соединительных муфт (для соединения двигателя с валом). Остальное думал спроектировать в 3D-редакторе, распечатать и затем собрать. Но пока ждал посылки, китайцы начали продавать линейные актюаторы по цене чуть больше $20 за штуку, что сводило на нет, все мои изыскания в экономии. Основная идея - заменить внутренний двигатель на другой с нужным редуктором (побыстрее) и энкодером на датчиках Холла, добавить контроллер и драйвер управления двигателями. Вот в четверг получил посылку с двумя такими (один сломать, второй потерять). Заказывал со скоростью 30 мм/с и 50 мм ходом. Масса оказалась 43 грамма (обычные кухонные весы с погрешностью 10 грамм) Ну чтож глянем что внутри? Для сравнения положил моторчик с энкодером. Соответственно что теперь имеем: Перепаять концевики можно и нужно на моторчик с энкодером. Нужно распечатать пластиковый новый корпус, чтобы моторчик с энкодером поместился. Контроллер и драйвер думаю использовать все таки внешние и не прятать их в корпус, у меня вроде в голове складывается что актюаторов будет четное количество в местах установки, соотвественно можно сделать драйвер и контроллер на пару. Хотя тут нужно подумать - потому как сразу возникает вопрос с протоколом соединения. Edited September 12, 2020 by kharlashkin 2 @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted September 12, 2020 Share Posted September 12, 2020 А че в Китае нет дешевых комплектующих? Вроде все эти моторчики - дешевая рассыпуха? Для реализации привода нужен только дешевый при дешевый микромоторчик, а к нему можно сконструировать и напринтить любой привод, превращающий вращательное движение ротора моторчика в поступательное движение в любой плоскости или оси свободы. @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted September 12, 2020 Author Share Posted September 12, 2020 1 час назад, StranikS_Scan сказал: А че в Китае нет дешевых комплектующих? Вроде все эти моторчики - дешевая рассыпуха? Для реализации привода нужен только дешевый при дешевый микромоторчик, а к нему можно сконструировать и напринтить любой привод, превращающий вращательное движение ротора моторчика в поступательное движение в любой плоскости или оси свободы. Ну в том то дело, что комплектующих вагон и маленькая тележка, но собрать все это дело воедино нужно суметь. Я как раз и пишу что все комплектующие доступны в "Поднебесной" за вменяемые деньги. @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted September 15, 2020 Author Share Posted September 15, 2020 В общем и целом пару дней ломал голову как прикрутить какой-то контроль хода линейного актюатора. Пришел к следующему неутешительному выводу: использовать энкодеры будет проблематично, хотя точность при этому будет более чем замечательная. Для того чтобы использовать моторчики с энкодерами, нужно на каждый линейный актюатор вешать отдельный микроконтроллер и делать потом на каком-то протоколе обмен между ними - сильно усложнит всю систему, а может и нет - нужно попробовать. Основная проблема - когда прилетает импульс от датчика Холла, их обязательно нужно обрабатывать, а таких датчиков два и скорость вращения двигателей без нагрузки 15000 об/мин. Думаю попробовать пока собрать для теста из подручных материалов стенд и посмотреть как что к чему зачем. Изучив более детально вышеописанное начал смотреть в сторону механического контроля, что тоже не особо радует. Наверно самым правильным будет использование мембранного потенциометра внутри корпуса производства Spectra Symbol, и по размерам очень подходит. В этом случае одним контроллером можно будет контролировать довольно много двигателей через драйверы и ход актюаторов по аналоговому сигналу. Буду парочку заказывать, а пока жду - соберу тест на энкодерах и отрисую в Blender актюаторы для определения их роли. 1 @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted October 19, 2020 Author Share Posted October 19, 2020 (edited) Итак, пару дней назад забрал посылку с парой мембранных потенциометров. Заказать их и получить тот еще квест ;) Поломав голову пару дней - выбрал модельку TSP-L-0050-103-1%-RH, ссылка на DigiKey, по нескольким причинам: общая ширина потенциометра 10 мм, а активная 6 мм - то есть он должен полностью по ширине поместиться в актюаторы; общая толщина чуть менее 0,5 мм - он поместиться внутри на стенке металлического кожуха и не будем ничему мешать. Решил парочку заказать - как раз для 2-х актюаторов (сломать - потерять). В Китае для заказа недоступны доступны только длиной, но есть на вышеупомянутом DigiKey и Mouser. Заказ через посредников, которые привезут что угодно откуда угодно, обошелся для 2-х потенциометров обошелся в две цены. С другой стороны если заказывать таких устройств с 10-к, то цена доставки будет та же и тогда уже наценка будет не 100 а 20 %. Настала очередь экспериментов. Подключил по простой схеме: +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 October 19, 2020 by kharlashkin 2 @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted February 2, 2021 Author Share Posted February 2, 2021 (edited) Математическая модель платформы Стюарта. Давайте реально рассчитаем нашу платформу для средней части туловища будущего робота. Ниже две вырезки из замечательной книги «Анатомия для скульпторов», которые отображают места и площади срезов в женском теле человека. Расстояния между зеленым и фиолетовыми срезами - равно примерно стандартной единице измерения человеческого тела (голова) - в нашем случае это 125 мм. (для робота ростом 1 м и идеальным соотношением голов к росту в 8 единиц). Спасибо создателям этой книги - в этом рисунке они постарались учесть пропорции и размеры по максимуму - и можно говорить что в фиолетовый и зеленый срезы можно примерно вписать окружность с диаметром 100 мм. Эти начальные параметры мы и берем за основу - расчетная высота нашей платформы будет 125, а расчетные окружности основной и подвижной плоскостей с диаметром 100 или радиусом 50 мм. Получилось как то так. Угол между точками составляет 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 - мы не берем это в расчет. Формулы для нахождения координат вектора при повороте на угол Ɵ ниже, знак выбирается в зависимости от системы координат - правосторонняя или левосторонняя, в формуле так же нужно использовать радианы, вместо градусов . Забьем эти формулы в табличку и получим следующие значения координат точек для базовой платформы. 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 Вот теперь мы можем вычислить наши отрезки, для этого найдем вектор начало которого будет на основе, а конец на подвижной части и найдем модуль этого вектора. В принципе можно просто искать отрезок - формулы одинаковы, но будем использовать векторы. 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 Ну вроде все правильно - у нас получилось что все отрезки в стартовом состоянии равны 131 мм. Посмотрим на чертеж линейных актюаторов из поднебесной. Китайцы делают их с ходом 10, 21, 30, 50 и 100 мм. Начальное состояние у нас должно быть для актюатора где-то не в самом начале, а примерно посередине, чтобы должна быть возможность хода в обе стороны. Таким образом для хода в 50 мм у нас получиться (для центра отверстий): ; . Т.е. 131 мм. - как раз чуть больше середины: . Теперь думаю понятно что перемещая или вращая подвижную часть относительно базы, нам нужно вычислять соответствующие точки, затем вычислять по ним модуль векторов (отрезков) и выдвигать актюаторы на нужную длину. Здесь есть несколько проблем, заранее нужно условится, что расчет будет всегда происходить от начального состояния и первым мы делаем расчет вращения подвижной части, а затем применяем к ней перемещение . С перемещением подвижной части все относительно просто - берем вектор , где начальная точка с координатами , а ' конечная точка и перемещаем все наши точки по формуле: А вот с вращением все немного интереснее. Углы Крылова или Эйлера имеют ограничения в виде определенности последовательности поворотов и так называемый «шарнирный замок» - так что будем использовать кватернионы. Находим векторы в начальном состоянии - это просто, нужно от конечной точки отнять конечную. 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 Для поворота вектора кватернионом необходимо: Создать кватернион из нашего вектора, добавив к нему скалярную нулевую часть blue_move_q = (0, 50, 0, 0) (как пример). Кватренион состоит из скалярной части qw и векторной qx, qy, qz. Умножить наш кватернион поворота на созданный и затем умножить на сопряженный blue_move_q' = q • blue_move_q • . Таким образом мы применяем поворот, который описывает наш кватернион к вектору. Отбрасываем скалярную часть чтобы получить наш повернутый вектор blue_move_v'. Так как у нас используется нулевая скалярная часть, и для получения вектора она нам тоже не нужна - умные люди сильно упростили данное вычисление и оно выполняется быстрее. Где - исходный вектор, - векторная часть кватерниона, - скалярная часть кватерниона, - произведение, • - скалярное произведение и - искомый вектор. Вернемся к нашей платформе, мы будем получать два кватерниона для робота - один говорит нам о повороте основы в глобальном пространстве, второй о повороте подвижной части. Для получения поворота подвижной части в координатах основы (то как повернуть подвижную часть нужно относительно координат основы) необходимо кватернион основы умножить на кватернион подвижной части и мы получим кватернион который описывает вращение как будто основа у нас неподвижна и находиться в центре координат. Формула умножения: ; Где - векторное произведение, а - скалярное. Приводить полную формулу не буду - легко гуглиться ;) Итак, у нас есть кватернион поворота для локальной системы координат подвижной части платформы, базовый для расчета берем тождественный, с координатами (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. Пошу прощения, делал все в текстовом редакторе - немного поломалась разметка ;) Edited February 2, 2021 by kharlashkin 3 @ Quote Link to comment Short link Share on other sites More sharing options...
priestov Posted February 19, 2021 Share Posted February 19, 2021 12.09.2020 в 20:08, kharlashkin сказал: Ну в том то дело, что комплектующих вагон и маленькая тележка, но собрать все это дело воедино нужно суметь. Я как раз и пишу что все комплектующие доступны в "Поднебесной" за вменяемые деньги. Специально зарегался на форуме ради этой темы. Очень мало инфы, особенно в русскоязычном сегменте, особенно в плане взаимозаменяемости сервоприводов. Я думаю изменять придётся не только места креплений, но и платы управления. Может есть смысл перейти на STM или на малинку с таким доработками? Но судя по расчетам, тело будет тоже пересчитано.... @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted February 20, 2021 Author Share Posted February 20, 2021 15 часов назад, priestov сказал: Специально зарегался на форуме ради этой темы. Очень мало инфы, особенно в русскоязычном сегменте, особенно в плане взаимозаменяемости сервоприводов. Я думаю изменять придётся не только места креплений, но и платы управления. Может есть смысл перейти на STM или на малинку с таким доработками? Но судя по расчетам, тело будет тоже пересчитано.... В отношении МК думаю что более популярным будет что-то "ардуиноподобное" - я смотрю в сторону ESP8266. А вот в отношении мозгов долго думал и купил для старта бу-шный PC-Stick на Intel Atom X5-Z8350 с 4 ГБ ОЗУ и 32 ГБ SSD. Хотя потом уже понял что нужно было переплатить немного и купить с USB3 (у меня только USB2), так как модули компьютерного зрения с сенсорами глубины только USB3. @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted February 21, 2021 Author Share Posted February 21, 2021 (edited) 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 и больше памяти - мне только на руку. Кстати приехали пара сервоприводов и шаровые соединители, буду договариваться с "жабой" о заказе линейных приводов и потенциометров к ним. Пока будут ехать - нужно начинать проектировать для печати нижнюю и среднюю части туловища робота, гду и будет платформа Стьюарта. Edited February 24, 2021 by kharlashkin @ Quote Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted April 6, 2021 Author Share Posted April 6, 2021 В поисках более "легковесного" протокола для передачи данных наткнулся на MQTT-SN. Поковыряв его пару выходных - родилась статья. А вообще выглядит очень многообещающим для общения между частями будущего робота. @ Quote Link to comment Short link Share on other sites More sharing options...
Recommended Posts
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.