roboforum.ru

Технический форум по робототехнике.

Нужна помощь с четвероногом

Re: Нужна помощь с четвероногом

Robo_hobo » 26 мар 2020, 15:39

Aseris писал(а):Обратная кинематика для шестинога, вроде даже на форуме было. или гуглить inverse kinematic
Тот же open dog смотреть

Open dog смотрел, больно как-то ухищренно он механику выдумывает. Сегодня на работе, немного переделал свой код, теперь все считает точно, правда пока в одной плоскости для 2dof. Задачка на Питоне, но в целом все понятно, можно перенести в любой другой вид.
Все сверял на калькуляторе и на бумаге, работает. Сегодня занесу это дело в ардуино, посмотрим как будет на деле. Единственное нужно будет подумать как перевести угл колена, у меня серво работает через рычаг.
Вот сам код:
Код: Выделить всёРазвернуть
import math
l1 = 12  #длинна плеча
l2 = 14  #длинна предплечья
x = -1   #координата Х
y = 19   #координата Y

B = (x**2)+(y**2)    #прямая 0-(x, y)
B = math.sqrt(B)
q1 = math.acos(x/B)
q1=math.degrees(q1)
print("q1 = ", q1)
q2 = math.acos(((l1**2-l2**2)+B**2)/(2*B*l1))
q2 = math.degrees(q2)
print("q2 = ", q2)
Q1 = q1 - q2
print("Угол плеча: ", Q1)

Q2 = math.acos((l1**2+l2**2-B**2)/(2*l1*l2))
Q2 = 180 - math.degrees(Q2)
print("Угол предплечья: ", Q2)

Собственно может пригодится кому-то, углы сразу показывает в градусах.
Q1 - угол для плеча относительно Х
Q2 - угол для предплечья относительно плеча.

Re: Нужна помощь с четвероногом

Angel71 » 26 мар 2020, 23:00

поискать, допустим с таким запросом "inverse kinematics library python" не догадались? полно готовых библиотек на с++, питоне и куче других языков. если не подключил и работай, то как минимум можно за основу взять. вместо использования print подумайте, может всё же удобней будет использовать графику.

Re: Нужна помощь с четвероногом

Robo_hobo » 27 мар 2020, 11:26

Angel71 писал(а):. вместо использования print подумайте, может всё же удобней будет использовать графику.

Конечно было бы удобнее, я просто пока не дошёл до визуализации питона и где, в чем это можно сделать, через стороннюю программу или через библиотеки самого питона. Так что пришлось сверять значения с теми что на бумаге) Недавно прочитал про vPython вроде так называется, хочу попробовать.
Вчера я все затестил на ноге, ставит ногу куда нужно, код работает, единственное, что предплечье двигается через рычаг, так что я сейчас пытаюсь вывести соотношение градусов сервы от градусов самого предплечья.
Серва двигает по окружности и меняет свой угол равномерно по отношению ко времени, а вот предплечье идет по нарастанию и ближе к 60 по 120 имеет самое большое изменение угла относительно времени, и с 120 - 180 снова уменьшает градусы (В общем очевидно) Буду думать как из сопоставить.

Re: Нужна помощь с четвероногом

Robo_hobo » 05 апр 2020, 15:57

На карантине выпало немало времени свободного, допечатал платформу с ногами, пока достаточно для отладки движений.
Хотел бы услышать совет по поводу кода, создал я сейчас начал завязывать все через функции void ну и через millis снова.
То есть, создаю к примеру 4 функции с описанием и расчетами ИК для каждой по X и Y.
В итоге описывается так, в основном теле арограммы:
void frontL(x, y) - значения куда хотим переместить левую переднюю лапу подставляя цифры под X и Y.
Ну и соответственно под остальные 3 лапы.
Так как временные задержки отсутствуют и все четыре функции будут прогоняться множество раз, пока условия функций не будут выполнены, в нашем случае 3 угла серв для каждой ноги, то они будут выполняться одновременно.
Может есть какие-то другие способы применения ИК для ног?
Вложения
IMG_20200404_212323.jpg
IMG_20200405_011828.jpg

Re: Нужна помощь с четвероногом

Robo_hobo » 26 апр 2020, 14:19

Карантин идет, работа тоже идет. Робот пошел, все удачно, правда с этой постановкой ног он все время стремился сесть на зад, немного не учел центр тяжести, но в целом он не плохо ходил, но устойчивость была не очень, так что я выкинул половину робота и пересобрал на новых ногах, так стало гораааздо лучше, центр тяжести стал ровно по середине, почти, что хорошо сказалось на ходьбе. Организовано два режима, ходьба на месте, когда поднимаются обе ноги на крест на крест и ходьба в таком же режиме. Ноги перестали скаблить пол. Постараюсь на днях залить видео на ютуб, чего я еще ни разу не делал. А пока фото самой платформы. И еще работает функция стабилизации, правда пока без хоть бы, а просто на месте, выравнивания корпус в зависимости от наклона поверхности на которой стоит. Пробовал это объеденить с ходьба, но его колошматит не по детски, надо будет думать как это реализовать.
Так же пока думаю как добавить сюда ось Z для перемещения ног не только по точкам X(длинна) т Y(высота) но и стороны. Ведь сервы для крена расположены так.. Окружность которая вращается строго по центру, а сама конечность начинается на самой линии окружности, строго с ее левого и правого края, в зависимости от стороны ног..

Добавлено спустя 2 минуты 33 секунды:
Те кто следит за этой темой, может догодаться, что постановка ног взята у ANYmal, швейцарской компании))
Вложения
IMG_20200423_161738.jpg
IMG_20200423_161722.jpg

Re: Нужна помощь с четвероногом

Robo_hobo » 27 апр 2020, 22:26

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

Re: Нужна помощь с четвероногом

Robo_hobo » 25 сен 2020, 14:47

И так, дела такие.
До raspberry Pi так и не дотянулся еще.
Движение ног сделано по миллиметрам, то есть, есть x, y, z, и s1, s2, где X это значение в миллиметрах на которое нога должна двинуться вперед/назад, Y это высота подъема, тоже в миллиметрах и Z, движение лапы в бок лево/право. S1 скорость совершения движения плеча и S2 скорость совершения движения предплечья.
И все вроде бы хорошо, довольно просто описывать нужные движения, НО, только те, которые касаются передвижения ноги из пункта А в пункт Б, а вот если стоя на одном месте нужно морду на лево/право повернуть, тут уже мой алгоритм не помогает, приходится тыкать пальцем в небо, так как при этом задействованы сразу все оси x, y, z. По факту поворачивает тело и как нужно вы вернуться ногам для успешного маневра им не понятно.
И тут я задумался, что все хочется по человечески сделать. Почитал интернет нашел програму Gazebo. Кто-нибудь сталкивался с ее работой? Ведь гораздо проще создать симуляцию модели вертеть ее как хочется и просто брать нужные угля из нее и переносить на реальную модель. Как еще это можно реализовать?

Re: Нужна помощь с четвероногом

Angel71 » 25 сен 2020, 19:11

после простенького варианта в лоб секвенсором или что именно у вас было, сразу сильно более сложный алгоритм пытаться реализовать не стоит, мозги поплавятся.
в unity3d или unreal некоторые интересные вещи можно реализовать или подсмотреть реализацию. gazebo или ещё что на подобии тоже вполне подойдёт. хотя бы из-за того, что в самом начале физика уже есть.
простую симуляцию ещё можно сделать в processing или cinder. на python тоже можно, тем более позже может быть полезно и для зрения/нейросетей.
никто не запрещает попробовать хоть все варианты и что покажется более простым и быстрым в освоении, то и использовать. зацикливаться на симуляторе точно не стоит - от него ничего навороченого и сложного не нужно.
по алгоритмам немного в статьях и прочем из игровой индустрии поизучайте. не всё можно применить, тем более в лоб, но много полезного узнать можно. на этой итерации нейросети пробовать применять наверно не стоит, но начать по теме изучать не помешает.
п.с. на всякий случай. если использовали углы эйлера, переделайте на кватернионы.

Re: Нужна помощь с четвероногом

Robo_hobo » 26 сен 2020, 01:23

Angel71 писал(а):после простенького варианта в лоб секвенсором или что именно у вас было, сразу сильно более сложный алгоритм пытаться реализовать не стоит, мозги поплавятся.
в unity3d или unreal некоторые интересные вещи можно реализовать или подсмотреть реализацию. gazebo или ещё что на подобии тоже вполне подойдёт. хотя бы из-за того, что в самом начале физика уже есть.
простую симуляцию ещё можно сделать в processing или cinder. на python тоже можно, тем более позже может быть полезно и для зрения/нейросетей.
никто не запрещает попробовать хоть все варианты и что покажется более простым и быстрым в освоении, то и использовать. зацикливаться на симуляторе точно не стоит - от него ничего навороченого и сложного не нужно.
по алгоритмам немного в статьях и прочем из игровой индустрии поизучайте. не всё можно применить, тем более в лоб, но много полезного узнать можно. на этой итерации нейросети пробовать применять наверно не стоит, но начать по теме изучать не помешает.
п.с. на всякий случай. если использовали углы эйлера, переделайте на кватернионы.

Понимаете, проба всего по очереди это большое колличество времени и я, так же понимаю, что в этой сфере хобби на лету не заскакивают, все кропотливо на пробах и ошибках) Нейросети - супер, хотел бы я внедрить в свой проект - конечно, но я не программист и это будет крайне долго)
https://youtu.be/Pj9f_Zz1p2c вот ссылка, не знаю правильно я вставил ее или нет, там пара видео с моей кракозяброй. Вот интересен сам поворот корпуса, при таком движении происходит большое колличество действий в ногах и плечах. Я его можно сказать осуществил просто методом тыка.
В общем интересно ПО, в которой можно наглядно посмотреть на свое творение в 3д, пусть даже 2д, покрутить имею в виду движения и тоже самое потом перенести какие-либо движения на реальную модель.
А машинное зрение, в моем случае OpenCV достаточно, но это отдельная история, пока механика/кинкматика.
На счет Эйлера не знаю)) думаю вряд ли, просто пересчет через длины костей и углов между ними, грубо говоря простая триганометрия/ик

Re: Нужна помощь с четвероногом

Angel71 » 26 сен 2020, 05:02

предыдущее сообщение не цитируют.
пробы/ошибки это немного другое. мозги не моментально "перестраиваются" и полезная информация тоже не в одном месте лаконично находится. механика без кода бесполезна, так что или довольствоваться очень простыми вариантами или постепенно "прокачиваться" и делать всё лучше и лучше. а сразу, повторюсь, поплавятся.
игровой движок ещё можно использовать для создания управляющей программы для компьютера/смартфона/планшета. если тяжело, долго или просто не хочется, совсем или пока что можно и без него. из простого и по быстрому, управление можно на app inventor. а так много ещё на чём можно сделать управление.
газебо хороший вариант для симуляций. из всех ориентированных на робототехнику симуляторов, на данный момент пожалуй самый лучший вариант.
из симулятора переносить можно по разному. в простом варианте опять без обратной связи, похоже именно это пока и планируете сделать. а так, для управления движениями сильно не лишним будет со временем обрабатывать, данные с датчиков и физику просчитывать (gazebo опенсорсный, ко всем четырём поддерживаемым движкам физики исходники тоже есть) и отойти от простого секвенсора по точкам.
в статьях, документации, видео,... на игровую тематику, очень много полезного по управлению движением (+по фону ещё некоторые полезняшки) можете подчерпнуть. не лишним будет сразу обратить внимание на такие ругательства как "gimbal lock" и "сингулярность".
для подумать над некоторыми моментами в коде или попробовать реализовать:
1) работаете с одной лапой (прикреплена к корпусу или нет, не важно). верхняя точка закреплена в пространстве, движения нижней в одной плоскости (допустим вверх/вниз, вперёд/назад):
__а) по прямой от точки к точке из массива и после последней возврат в первую точку. прямоугольник, треугольник, пол шестигранника, произвольные точки
__б) интерполяция точек из массива (треугольник, пол шестигранника или произвольные) и движение по полученной траектории
__в) движение по кривым, допустим безье или функций (круг, синус и т.д.). вписанные в прямоугольник пол круга, полукруг, пол капли и т.д. относительно некоторой точки пол или четверть круга.
2) движение корпуса вперёд по прямой, плоскость корпуса стараться удерживать парралельно столу и на одной высоте:
__а) нижнюю точку ног перемещаете, допустим на 4см вперёд и преподымая не выше чем на 2см
__б) тоже самое, но плоскость корпуса опустить немного ниже или приподнять немного выше
__в) нижнюю точку ног перемещаете, допустим на 2см вперёд и преподымая как минимум на 4см
__г) часть ног как а, часть как б
3) корпус по прямой, высота точек фиксирована, но по высоте на разном уровне (т.е. корпус наклонён вперед, вбок или ещё как)
4) движение одной лапы в воздухе, только в отличии от 1, все или часть точек плоскости корпуса в пространстве не фиксированы. т.е. "рисование" лапой какой загигулины в пространстве. стоя, сидя, в одной плоскости или 3д гагигулина
и т.д. сначала отдельными программами или подпрограммами примерно так над кинематикой поработать, затем прорабатывать, как соединять всё вместе (а вариантов прилично).
со временем захочется реализовать возможность из любого положения в любое другое переходить, в том числе и в любой момент выполнения последовательности переключиться на другую последовательность. сидит, нужно встать на все лапы. сидит и "рисует" лапой в воздухе, в любой момент остановиться и головой в сторону посмотреть. конец лапы же можно и примерно там же в воздухе удерживать и на стол опустить. идёт вперёд и в любой момент повернуть и идти в другом направлении. последовательности можно доиграть до конца и перейти в начало другой последовательности. можно из текущих точек переместиться в начальные или ещё какие другой последовательности, при чём далеко не всегда возможно точки всех сочленений по прямым переместить.
в итоге скорей всего кватернионы начнёте использовать (углы эйлера совсем не исчезнут, местами и они нужны). а кинематика сама по себе конечно простая, только это всего-лишь маленькая часть от всего. когда из кучи таких простеньких кусочков начнёте пробовать систему делать, простота быстро испарится.


cron
Rambler\'s Top100 Mail.ru counter