нетривиальная кинематика
-
- Мастер
- Сообщения: 265
- Зарегистрирован: 30 ноя 2013, 19:16
- Репутация: 136
- Настоящее имя: Алексей
- Откуда: Алматы
- Контактная информация:
нетривиальная кинематика
Прошу совет в какую сторону копать.
Есть гексапод с приводом на моторах редукторах (на картинке привод внизу круглый) на нем же стоит энкодер который индицирует угловое положение выходного вала. Все это управляется 5I25+7I77 и LNC. С этой связкой проблем нет.
Выход редуктора, он вращается только пол оборота, через кривошип соединен с узлом линейного перемещения (прямоугольник сверху перемещается вверх вниз)
В LCNC даешь команду на перемещение оси на 100 дискрет он крутит редуктором проворачивает на 100 угловых дискрет.
Но верхнее звено линейно перемещает по синусоидальному закону. Как можно преобразовать сигнал энкодера чтоб в аксис он высвечивался после обработки специальной формулой.
Есть гексапод с приводом на моторах редукторах (на картинке привод внизу круглый) на нем же стоит энкодер который индицирует угловое положение выходного вала. Все это управляется 5I25+7I77 и LNC. С этой связкой проблем нет.
Выход редуктора, он вращается только пол оборота, через кривошип соединен с узлом линейного перемещения (прямоугольник сверху перемещается вверх вниз)
В LCNC даешь команду на перемещение оси на 100 дискрет он крутит редуктором проворачивает на 100 угловых дискрет.
Но верхнее звено линейно перемещает по синусоидальному закону. Как можно преобразовать сигнал энкодера чтоб в аксис он высвечивался после обработки специальной формулой.
- Вложения
-
- кривулька.JPG (8.51 КБ) 7635 просмотров
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: нетривиальная кинематика
"свою" формулу преобразования прописываешь в модуль кинематики,который используешь...
там две основных функции - прямая кинематика(kinematicsForward) , и обратная(kinematicsInverse)...
для "правильного" отображения в DRO нужно изменять прямую кинематику
там две основных функции - прямая кинематика(kinematicsForward) , и обратная(kinematicsInverse)...
для "правильного" отображения в DRO нужно изменять прямую кинематику
-
- Мастер
- Сообщения: 265
- Зарегистрирован: 30 ноя 2013, 19:16
- Репутация: 136
- Настоящее имя: Алексей
- Откуда: Алматы
- Контактная информация:
Re: нетривиальная кинематика
Подскажи где мне это искать. Я честно говоря потерялся.
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: нетривиальная кинематика
для начала выложи свой файл кинематики(он прописан в хал файле где то в самом начале)...
loadrt trivkins - это "обычная" кнематика для 3-х осей
что у тебя за строка там прописана?
-----------
и второе - нужна зависимость между вращением и линейным перемещением (реальные размеры плечей)
loadrt trivkins - это "обычная" кнематика для 3-х осей
что у тебя за строка там прописана?
-----------
и второе - нужна зависимость между вращением и линейным перемещением (реальные размеры плечей)
-
- Мастер
- Сообщения: 265
- Зарегистрирован: 30 ноя 2013, 19:16
- Репутация: 136
- Настоящее имя: Алексей
- Откуда: Алматы
- Контактная информация:
Re: нетривиальная кинематика
loadrt trivkins такая строка есть - а куда она обращается где эти описания кинематики лежат не знаю
Реальные размеры плечей есть. Но получается используется только радиус по которому на редукторе двигается шатун.
Общее перемещение равно 2R на 180 градусов поворота редуктора.
Скорость перемещения кстати тоже по этому же закону будет меняться.
Реальные размеры плечей есть. Но получается используется только радиус по которому на редукторе двигается шатун.
Общее перемещение равно 2R на 180 градусов поворота редуктора.
Скорость перемещения кстати тоже по этому же закону будет меняться.
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: нетривиальная кинематика
путь к файлу кинематики(да и вообще к любому файлу в линукс) можноaleha писал(а):loadrt trivkins такая строка есть -
найти командой в терминале:
Код: Выделить всё
lacate trivkins.c
в том числе trivkins.c:
Код: Выделить всё
/********************************************************************
* Description: trivkins.c
* Trivial kinematics for 3 axis Cartesian machine
*
* Derived from a work by Fred Proctor & Will Shackleford
*
* Author:
* License: GPL Version 2
* System: Linux
*
* Copyright (c) 2004 All rights reserved.
*
* Last change:
********************************************************************/
#include "kinematics.h" /* these decls */
int kinematicsForward(const double *joints,
EmcPose * pos,
const KINEMATICS_FORWARD_FLAGS * fflags,
KINEMATICS_INVERSE_FLAGS * iflags)
{
pos->tran.x = joints[0];
pos->tran.y = joints[1];
pos->tran.z = joints[2];
pos->a = joints[3];
pos->b = joints[4];
pos->c = joints[5];
pos->u = joints[6];
pos->v = joints[7];
pos->w = joints[8];
return 0;
}
int kinematicsInverse(const EmcPose * pos,
double *joints,
const KINEMATICS_INVERSE_FLAGS * iflags,
KINEMATICS_FORWARD_FLAGS * fflags)
{
joints[0] = pos->tran.x;
joints[1] = pos->tran.y;
joints[2] = pos->tran.z;
joints[3] = pos->a;
joints[4] = pos->b;
joints[5] = pos->c;
joints[6] = pos->u;
joints[7] = pos->v;
joints[8] = pos->w;
return 0;
}
/* implemented for these kinematics as giving joints preference */
int kinematicsHome(EmcPose * world,
double *joint,
KINEMATICS_FORWARD_FLAGS * fflags,
KINEMATICS_INVERSE_FLAGS * iflags)
{
*fflags = 0;
*iflags = 0;
return kinematicsForward(joint, world, fflags, iflags);
}
KINEMATICS_TYPE kinematicsType()
{
return KINEMATICS_IDENTITY;
}
#include "rtapi.h" /* RTAPI realtime OS API */
#include "rtapi_app.h" /* RTAPI realtime module decls */
#include "hal.h"
EXPORT_SYMBOL(kinematicsType);
EXPORT_SYMBOL(kinematicsForward);
EXPORT_SYMBOL(kinematicsInverse);
MODULE_LICENSE("GPL");
int comp_id;
int rtapi_app_main(void) {
comp_id = hal_init("trivkins");
if(comp_id > 0) {
hal_ready(comp_id);
return 0;
}
return comp_id;
}
void rtapi_app_exit(void) { hal_exit(comp_id); }
какую из осей нужно редактировать?
- MX_Master
- Мастер
- Сообщения: 7478
- Зарегистрирован: 27 июн 2015, 19:45
- Репутация: 3101
- Настоящее имя: Михаил
- Откуда: Алматы
- Контактная информация:
Re: нетривиальная кинематика
Пример, от Nick'a - http://www.cnc-club.ru/forum/viewtopic. ... 673#p78673
Как установить, от nkp - http://www.cnc-club.ru/forum/viewtopic. ... 673#p78684
Как установить, от nkp - http://www.cnc-club.ru/forum/viewtopic. ... 673#p78684
Копирайты соблюдены
-
- Мастер
- Сообщения: 265
- Зарегистрирован: 30 ноя 2013, 19:16
- Репутация: 136
- Настоящее имя: Алексей
- Откуда: Алматы
- Контактная информация:
Re: нетривиальная кинематика
У меня все оси одного типа. А когда я этот файл с кинематикой поменяю его надо компилировать.nkp писал(а): какую из осей нужно редактировать?
это оно?
sudo comp --install trivkinsnew.c
в hal строку loadrt trivkins заменить на loadrt trivkinsnew
trivkinsnew - это имя нашей новой кинематики (ну или любое другое)))
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: нетривиальная кинематика
только в свежих версиях емс вместо comp - halcompilealeha писал(а):это оно?sudo comp --install trivkinsnew.c
sudo halcompile --install trivkinsnew.c
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: нетривиальная кинематика
если я правильно понял,твоя зависимость выражается так:
R можно указать непосредственно,
а можно в виде пина ,значение которого можно будет менять в hal без
перекомпиляции кинематики...
пример назначения пинов:
Код: Выделить всё
double R=длина_плеча;
pos->tran.x = ((2*R)/180)*joints[0];
а можно в виде пина ,значение которого можно будет менять в hal без
перекомпиляции кинематики...
пример назначения пинов:
Код: Выделить всё
int rtapi_app_main(void) {
int res=0;
comp_id = hal_init("riderkins");
if (comp_id < 0) return comp_id;
haldata = hal_malloc(sizeof(*haldata));
if (!haldata) goto error;
if((res = hal_pin_float_new("riderkins.top", HAL_IO, &(haldata->d1), comp_id)) < 0) goto error;
if((res = hal_pin_float_new("riderkins.middle", HAL_IO, &(haldata->d2), comp_id)) < 0) goto error;
if((res = hal_pin_float_new("riderkins.bottom", HAL_IO, &(haldata->d3), comp_id)) < 0) goto error;
hal_ready(comp_id);
return 0;
error:
hal_exit(comp_id);
return res;
}
-
- Мастер
- Сообщения: 265
- Зарегистрирован: 30 ноя 2013, 19:16
- Репутация: 136
- Настоящее имя: Алексей
- Откуда: Алматы
- Контактная информация:
Re: нетривиальная кинематика
Я честно говоря второй вариант не понял.
Визуализация перемещения в матлабе выполняется и в ЛСНС посылаются длины актуаторов - кстати тоже задача нетривиальная это между собой связать.
Вот спасибо завтра попробую поиграть и зависимость покажу но неnkp писал(а):только в свежих версиях емс вместо comp - halcompilealeha писал(а):это оно?sudo comp --install trivkinsnew.c
sudo halcompile --install trivkinsnew.c
- отпишусь.nkp писал(а):double R=длина_плеча;
pos->tran.x = ((2*R)/180)*joints[0];
Визуализация перемещения в матлабе выполняется и в ЛСНС посылаются длины актуаторов - кстати тоже задача нетривиальная это между собой связать.
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: нетривиальная кинематика
для компиляции в "старых" версияз емс был модуль comp,aleha писал(а):Я честно говоря второй вариант не понял.
поэтому команда компиляции выглядела:
sudo comp --install trivkinsnew.c
--------------
сейчас новый модуль в сборках , halcompile,поэтому команда выглядит так:
sudo halcompile --install trivkinsnew.c
========================
подозреваю,что тебе можно взять готовую кинематику,ведь почти все уже написано до насизуализация перемещения в матлабе выполняется и в ЛСНС посылаются длины актуаторов - кстати тоже задача нетривиальная это между собой связать.
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: нетривиальная кинематика
это же то , что ты мне дал))aleha писал(а):и зависимость покажу но не
(2R на 180 градусов)
-
- Мастер
- Сообщения: 265
- Зарегистрирован: 30 ноя 2013, 19:16
- Репутация: 136
- Настоящее имя: Алексей
- Откуда: Алматы
- Контактная информация:
Re: нетривиальная кинематика
Извини спорить не буду.nkp писал(а):это же то , что ты мне дал))aleha писал(а):и зависимость покажу но не
(2R на 180 градусов)
Мой математик на доске какие-то формулы написал я завтра до них доберусь и в них въеду - просто дело под вечер было я не успел заморочится.
-
- Мастер
- Сообщения: 265
- Зарегистрирован: 30 ноя 2013, 19:16
- Репутация: 136
- Настоящее имя: Алексей
- Откуда: Алматы
- Контактная информация:
Re: нетривиальная кинематика
У меня trivkins только с расширением КО это видимо уже скомпилированный файл.
Менять кинематику надо с исходников. А скомпилированный файл куда надо попадет или надо указывать.
Менять кинематику надо с исходников. А скомпилированный файл куда надо попадет или надо указывать.
-
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: нетривиальная кинематика
да - попадает куда надоaleha писал(а):скомпилированный файл куда надо попадет или надо указывать.