Комментарии 21
Хорошо ходит. Достаточно плавно.
+3
Если С больше чем сумма длин FEMUR и TIBIA, то точка является не достижимой.
Или если С меньше чем разница длин FEMUR и TIBIA (точка слишком близко к основанию ноги).
+3
Буду рад если кто-нибудь сможет упростить этот алгоритм. Я делал его таким, чтобы понять его спустя, допустим, пол года.
Честно говоря, в ваш алгоритм не вчитывался, но когда я думал над подобным, я решал его через нахождение координат точки b как точки пересечения окружностей с центрами в a и c и радиусами равными длине суставов. Помнится что там к арктангенсам прибегать не приходилось, а потом уже отдельно для каждой сервы считал угол поворота от текущего положения для первого сустава, и от положения в точке b для второго.
0
Я с этого начал, но я от него отошел так как не особо понимал что откуда берется. Геометрию забыл совсем. Возможно вернусь к нему, если разберусь))
А так да, там вычисления проще.
0
Расчет в sympy вот что-то такое даёт… Но, конечно проверить надо. (l1, l2 — длины суставов, x,y,z — координаты конечной точки, q0,q1,q2 — углы на сервоприводах)
q₀ = atan2(y, x)
_______________________________
╱ 2
╱ ⎛ ______________⎞
╱ ⎜ ╱ 2 2 2 ⎟
╱ ⎝l₁ - ╲╱ x + y + z ⎠
l₂⋅ ╱ 1 - ─────────────────────────
⎛ _________⎞ ╱ 2
⎜ ╱ 2 2 ⎟ ╲╱ l₂
q₁ = atan2⎝z, ╲╱ x + y ⎠ - ──────────────────────────────────────────
l₁
⎛ ______________⎞
⎜ ╱ 2 2 2 ⎟
⎜-l₁ + ╲╱ x + y + z ⎟
q₂ = acos⎜───────────────────────⎟
⎝ l₂ ⎠
Генерирующий скрипт:
(r — расстояние от начала координат до концевой точки, beta — угол между горизонтальной плоскостью и вектором, проведенным от начала координат до концевой точки)
#!/usr/bin/env python3
#coding: utf-8
from sympy import *
var("beta q(0:3) l1 l2 z r x y z")
eq1 = Eq(r, l1 + l2*cos(q2))
eq2 = Eq(beta, q1+l2*sin(q2)/l1)
slv = solve([eq1,eq2], [q1,q2])
slv0 = slv[0]
h = sqrt(x**2 + y**2)
pprint(Eq(q0, atan2(y,x)))
pprint(Eq(q1, slv0[0].subs({beta:atan2(z, h), r:sqrt(z**2+h**2)})))
pprint(Eq(q2, slv0[1].subs({beta:atan2(z, h), r:sqrt(z**2+h**2)})))
+1
del
0
Есть еще один маленький нюанс. Не достаточно просто вращать ось вокруг COXA для шага. Дело в том, что кончик лапки движется относительно корпуса не параллельно продольной оси движения, а по дуге. Следовательно, если в процессе шага не корректировать дугу незначительным изменением остальных углов то возникнет скольжение. Первую половину шага лапки будут скользить от корпуса, вторую — к корпусу. Не очень значимый фактор, но он будет влиять на точность, скорость, затраты мощности и износ механики.
0
Верно. За движение по прямой отвечает алгоритм сглаживания. В процессе работы генерируется ряд точек, их количество зависит от желаемой скорости движения. Далее для каждой точки в определенные моменты времени считаются углы приводов и получается плавное движение кончика ноги по прямой параллельно продольной оси корпуса.
Сейчас все приводы меняют свое положение более менее синхронно и с приблизительно одинаковой скоростью.
Я хотел об этом рассказать в следующей статье. Там есть хитрые траектории движения, которые очень упрощают жизнь.
Сейчас все приводы меняют свое положение более менее синхронно и с приблизительно одинаковой скоростью.
Я хотел об этом рассказать в следующей статье. Там есть хитрые траектории движения, которые очень упрощают жизнь.
0
Очень круто! Реально впечатляет!
0
Я б добавил ещё один небольшой момент. При остановке сейчас ноги остаются стоять криво. Мне кажется будте очень «красиво», если при остановке ноги будут выравниваться не меняя положение корпуса.
0
Замечательнейшая статья! но вот вопрос, как такой гексапод пойдет по пересеченной местности, например по гальке или по вспаханному полю.
0
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Разработка hexapod с нуля (часть 3) — кинематика