roboforum.ru

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

Инверсная кинематика

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

Инверсная кинематика

Сообщение nanotroll » 08 июн 2016, 13:14

Добрый день!

Помогите пожалуйста разобраться с инверсной кинематикой для гексапода. Я использовал https://oscarliang.com/inverse-kinematics-implementation-hexapod-robots/ статью для расчета тригонометрических функций на ардуино мега 2560. На данный момент программа считает углы для каждой сервы для одной ноги. Дальше, как я понял, нужно перейти от системы координат конкретной ноги к общей системе координат (относительно центра тела). Я не могу понять сам принцип, например, как будет робот двигаться вперед? Я должен указать желаемые координаты центра ТЕЛА, дальше преобразовать эти координаты в новые (для каждой ноги относительно своих систем координат, развернутых относительно общей центральной на свой угол), дальше для каждой ноги пересчитать полученные координаты в значения углов, и подать эти значения на сервоприводы? Правильно ли я понял последовательность действий?

Может есть пример кода или подробное описание именно пересчета координат?

Код для ардуино:
Код: Выделить всёРазвернуть
const float pi = 3.14159265359;

const float coxalength = 28.0;
const float femurlength = 36.0;
const float tibialength = 75.0;

float coxaangle;
float femurangle;
float tibiaangle;

float L;
float L1;
float alpha1;
float alpha2;

void inverse_kinematics_calculations(float x, float y, float z) {
  L1 = sqrt(sq(x) + sq(y));
  L = sqrt(sq(L1 - coxalength) + sq(z));
  alpha1 = acos(z / L) * 180 / pi;
  alpha2 = acos((sq(femurlength) + sq(L) - sq(tibialength)) / (2 * femurlength * L)) * 180 / pi;

  coxaangle = atan(x / y) * 180 / pi;
  femurangle = (alpha1 + alpha2);
  tibiaangle = acos((sq(femurlength) + sq(tibialength) - sq(L)) / (2 * femurlength * tibialength)) * 180 / pi;
}

void refresh() {
  inverse_kinematics_calculations(60, 60, 0);
  Serial.println("Coxa angle = ");
  Serial.println(coxaangle);
  Serial.println("Femur angle = ");
  Serial.println(femurangle);
  Serial.println("Tibia angle = ");
  Serial.println(tibiaangle);
}

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  refresh();
  delay(5000);
}
nanotroll
 
Сообщения: 1
Зарегистрирован: 08 июн 2016, 12:50

Re: Инверсная кинематика

Сообщение setar » 08 июн 2016, 13:56

я в свое время разбирался с изделием зарубежного коллеги:
http://www.hexapodrobot.com/forum/viewt ... f=14&t=407
https://wuselfuzz.de/hexapod/

насколько помню там есть исходники в том числе с математикой

Добавлено спустя 6 минут 41 секунду:
мои наработки
Вложения
or-hexapod-control.tar.gz
(145.37 КиБ) Скачиваний: 0
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко


Вернуться в Новичкам или основы основ роботостроения.

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 8