Как показала практика, обилие кода в статье не очень хорошо сказывается на ее читабельности. Но для понимания того, как это все работает стоить иногда напрячь мозги. На что и была нацелена предыдущая публикация. Сегодня я постараюсь завершить цикл статей по программной начинке гексапода, сделав краткий обзор того, что с чем не успели познакомится.
Как мы печатали гексапода и что из этого получилось
Оживляем гексапода. Часть первая
Оживляем гексапода. Часть вторая
Физические характеристики робота определены в программе в виде набора конфигурационных параметров и вынесены в отдельный конфигурационный файл config.h. Среди этих параметров можно выделить следующие основные группы:
Для расчета прямой и обратной кинематики робота требуется выполнять векторные и матричные вычисления. Это осуществляется с помощью классов Vector3D и Matrix3D объявленных в файле 3d_math.h
Все исходные файлы теперь доступны на GitHub. Там же можно найти проект приложения для Android и модели для 3D печати. Раздел arduino состоит из двух подразделов:
Несмотря на то, что данная статья имеет заключительный характер, вне поля зрения остались темы организации канала связи через Wi-Fi и управление через Android. Если данные темы вызывают интерес или остались другие не рассмотренные вопросы, пишите об этом в комментариях или личной переписке. Я обязательно постараюсь дать развернутый ответ или посвятить этому отдельную статью.
Проект Geksa продолжит свое развитие. В ближайшей перспективе планируется изменение состава электронных компонентов, расширение функционала, доработка корпуса робота, внесение дополнений ПО. Буду рад услышать от вас конструктивные замечания или предложения.
Спасибо!
Цикл предыдущих статей:
Как мы печатали гексапода и что из этого получилось
Оживляем гексапода. Часть первая
Оживляем гексапода. Часть вторая
Конфигурация
Физические характеристики робота определены в программе в виде набора конфигурационных параметров и вынесены в отдельный конфигурационный файл config.h. Среди этих параметров можно выделить следующие основные группы:
Размеры конечностей и особенности их движения
Идентификатор | Описание характеристики |
---|---|
COXA_LENGTH | Длина плеча (мм) |
FEMORA_LENGTH | Длина бедра (мм) |
TIBIA_LENGTH | Длина голени (мм) |
TIBIA_OFFSET | Смещение плеча относительно сустава (мм) |
COXA_ANGLE_0 | Угол среднего (нулевого) положения плеча |
FEMORA_ANGLE_0 | Угол среднего (нулевого) положения бедра |
TIBIA_ANGLE_0 | Угол среднего (нулевого) положения голени |
COXA_ANGLE_INVERSE | Признак инверсии направления вращения плечевого сервопривода |
FEMORA_ANGLE_INVERSE | Признак инверсии направления вращения сервопривода бедра |
TIBIA_ANGLE_INVERSE | Признак инверсии направления вращения сервопривода голени |
Расположение и ориентация конечностей робота относительно его центра
Идентификатор | Описание характеристики |
---|---|
LEFT_FRONT_FOOT_POSITION | Точка крепления левой передней лапы |
LEFT_MIDLE_FOOT_POSITION | Точка крепления левой средней лапы |
LEFT_BACK_FOOT_POSITION | Точка крепления левой задней лапы |
RIGTH_FRONT_FOOT_POSITION | Точка крепления правой передней лапы |
RIGTH_MIDLE_FOOT_POSITION | Точка крепления правой средней лапы |
RIGTH_BACK_FOOT_POSITION | Точка крепления правой задней лапы |
LEFT_FRONT_FOOT_ROTATION | Ориентация левой передней лапы |
LEFT_MIDLE_FOOT_ROTATION | Ориентация левой средней лапы |
LEFT_BACK_FOOT_ROTATION | Ориентация левой задней лапы |
RIGTH_FRONT_FOOT_ROTATION | Ориентация правой передней лапы |
RIGTH_MIDLE_FOOT_ROTATION | Ориентация правой средней лапы |
RIGTH_BACK_FOOT_ROTATION | Ориентация правой задней лапы |
Допустимые диапазоны углов при работе сервоприводов
Идентификатор | Описание характеристики |
---|---|
COXA_MIN_ANGLE | Минимальное отклонение плеча от среднего положения |
COXA_MAX_ANGLE | Максимальное отклонение плеча от среднего положения |
FEMORA_MIN_ANGLE | Минимальное отклонение бедра от среднего положения |
FEMORA_MAX_ANGLE | Максимальное отклонение бедра от среднего положения |
TIBIA_MIN_ANGLE | Минимальное отклонение голени от среднего положения |
TIBIA_MAX_ANGLE | Максимальное отклонение голени от среднего положения |
COMPLEX_ANGLE_LIMITS_1 | Предельные максимальные одновременные значения углов наклона бедра и голени |
MIDLE_COXA_MIN_ANGLE | Минимальное отклонение среднего плеча от среднего положения |
MIDLE_COXA_MAX_ANGLE | Максимальное отклонение среднего плеча от среднего положения |
Характеристики движения робота
Идентификатор | Описание характеристики |
---|---|
MOTION_JOB_PERIOD | Периодичность пересчета положения конечностей (мсек) |
MOVE_STEP | Длина шага по прямой (мм) |
ROTATE_STEP | Длина шага по дуге при развороте (мм) |
Математика
Для расчета прямой и обратной кинематики робота требуется выполнять векторные и матричные вычисления. Это осуществляется с помощью классов Vector3D и Matrix3D объявленных в файле 3d_math.h
struct Vector3D
struct Vector3D {
float x,y,z;
Vector3D operator -(void) {
return {-x, -y ,-z};
}
Vector3D& operator=(const Vector3D a);
float len();
};
struct Matrix3D
struct Matrix3D {
float a[3][3];
Vector3D operator *(Vector3D& v) {
Vector3D p;
p.x = v.x*a[0][0] + v.y*a[0][1] + v.z*a[0][2];
p.y = v.x*a[1][0] + v.y*a[1][1] + v.z*a[1][2];
p.z = v.x*a[2][0] + v.y*a[2][1] + v.z*a[2][2];
return p;
};
Matrix3D operator *(Matrix3D m) {
Matrix3D r;
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
r.a[i][j] = 0;
for(int k=0; k<3; k++)
r.a[i][j] += a[i][k]*m.a[k][j];
}
}
return r;
};
};
Перегрузка операторов и вспомогательные функции
Vector3D operator +=(Vector3D left, const Vector3D right);
Vector3D operator -=(Vector3D left, const Vector3D right);
Vector3D operator- (Vector3D a, Vector3D b);
Vector3D operator+ (Vector3D a, Vector3D b);
Vector3D operator* (Vector3D a, Vector3D b);
Vector3D operator* (float a, Vector3D b);
Vector3D operator* (Vector3D a, float b);
Vector3D operator/ (Vector3D a, int b);
// возвращает матрицу поворота для углов вектора углов r = {rx, ry, rz}
Matrix3D rotMatrix(Vector3D r); // углы в радианах
Matrix3D rotMatrix2(Vector3D r); // углы в градусах
// арккотангенс угла
float arcctn(float);
Исходники
Все исходные файлы теперь доступны на GitHub. Там же можно найти проект приложения для Android и модели для 3D печати. Раздел arduino состоит из двух подразделов:
- main — основной набор файлов для контроллера Arduino
- wifi — прошивка для esp8622 необходимая для организации канала связи по Wi-Fi
Что дальше?
Несмотря на то, что данная статья имеет заключительный характер, вне поля зрения остались темы организации канала связи через Wi-Fi и управление через Android. Если данные темы вызывают интерес или остались другие не рассмотренные вопросы, пишите об этом в комментариях или личной переписке. Я обязательно постараюсь дать развернутый ответ или посвятить этому отдельную статью.
Проект Geksa продолжит свое развитие. В ближайшей перспективе планируется изменение состава электронных компонентов, расширение функционала, доработка корпуса робота, внесение дополнений ПО. Буду рад услышать от вас конструктивные замечания или предложения.
Спасибо!
ebragim
Насколько сложно было бы поставить тензодатчики (или хотя бы микрики) на кончики ног и использовать сигнал с них для определения касания и коррекции циклов движения?
И возможно ли «запутывание» ног, то есть задевают ли ноги у каких-либо точках друг друга?
Что думаете о механике с 2 сервами на ногу — одна на поворот, а вторая с помощью рычага (или лески) и пружин управляющая 3 фалангами? Я имею в виду, как у человека — когда мышцы сгибатели/разгибатели управляют всем пальцем на руке: youtu.be/n341mJFMTZg?t=131