roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 05:09

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Инверсная кинематика
СообщениеДобавлено: 08 июн 2016, 13:14 
Не в сети

Зарегистрирован: 08 июн 2016, 12:50
Сообщения: 1
Добрый день!

Помогите пожалуйста разобраться с инверсной кинематикой для гексапода. Я использовал 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);
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Инверсная кинематика
СообщениеДобавлено: 08 июн 2016, 13:56 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 04 окт 2004, 12:58
Сообщения: 10989
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко
я в свое время разбирался с изделием зарубежного коллеги:
http://www.hexapodrobot.com/forum/viewt ... f=14&t=407
https://wuselfuzz.de/hexapod/

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

Добавлено спустя 6 минут 41 секунду:
мои наработки


Вложения:
or-hexapod-control.tar.gz [145.37 КиБ]
Скачиваний: 0
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 4 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO