Настройка кинематики в EMC2
-
sasha_89
- Новичок
- Сообщения: 32
- Зарегистрирован: 11 ноя 2014, 21:51
- Репутация: 0
- Настоящее имя: Aleksandr
- Контактная информация:
Re: Настройка кинематики в EMC2
да нет - я не понял!
у меня задача - настроить так чтоб emc2 самая считала и выдавала те параметры чтоб было так как привел выше #62 -
например нарисовал линию закидаю в emc2 а она пусть самая считает G-кода!!!
у меня задача - настроить так чтоб emc2 самая считала и выдавала те параметры чтоб было так как привел выше #62 -
например нарисовал линию закидаю в emc2 а она пусть самая считает G-кода!!!
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Настройка кинематики в EMC2
где нарисовал? в какой программе?sasha_89 писал(а):нарисовал линию
"закидаю" именно "линию"? или Gкод "линии" ?sasha_89 писал(а):закидаю в emc2
============
если не секрет - что будет делать аппарат??
-
sasha_89
- Новичок
- Сообщения: 32
- Зарегистрирован: 11 ноя 2014, 21:51
- Репутация: 0
- Настоящее имя: Aleksandr
- Контактная информация:
Re: Настройка кинематики в EMC2
тю наверное G-кода линии!!
извини меня за мою тупость!
извини меня за мою тупость!
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Настройка кинематики в EMC2
давай напишем Gкод квадрата , на котором будем тестить твой аппарат...sasha_89 писал(а):наверное G-кода линии!!
ну в смысле ты напиши Gкод квадрата 5x5 (например) , и выложи сюда ...
-
sasha_89
- Новичок
- Сообщения: 32
- Зарегистрирован: 11 ноя 2014, 21:51
- Репутация: 0
- Настоящее имя: Aleksandr
- Контактная информация:
Re: Настройка кинематики в EMC2
а аппарат будет как наглядная модель в универе на кафедре!
Преподаватель поставил мне цель сделать - что б EMC2 программно считала угли!

Преподаватель поставил мне цель сделать - что б EMC2 программно считала угли!

- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Настройка кинематики в EMC2
перевожу на язык LinuxCNC:

Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Настройка кинематики в EMC2
Судя по файлу кинематики у тебя поворотная ось имеет номер 4.
Т.е. надо выводить на движок X действие stepgen.3.
Можешь сейчас открыть halshow, добавить туда axis.3.motor-pos-cmd и axis.3.joint-pos-cmd потом, крутишь 4 ось кнопочками в ручнам режиме.
Оба пина должны меняться синхронно и не реагировать на перемещения по XY. Потом делаем home и переключаем режим на управление в world координатах (Меню - Вид - два последних пункта). И опять пробуем ездить в XY, при этом axis.3.joint-pos-cmd должен начать меняться.
Т.е. надо выводить на движок X действие stepgen.3.
Можешь сейчас открыть halshow, добавить туда axis.3.motor-pos-cmd и axis.3.joint-pos-cmd потом, крутишь 4 ось кнопочками в ручнам режиме.
Оба пина должны меняться синхронно и не реагировать на перемещения по XY. Потом делаем home и переключаем режим на управление в world координатах (Меню - Вид - два последних пункта). И опять пробуем ездить в XY, при этом axis.3.joint-pos-cmd должен начать меняться.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: Настройка кинематики в EMC2
Тогда тут должно быть наверное joints[2]
sasha_89 писал(а):joints[3] = A * (180.0/PM_PI);
sasha_89 писал(а):joints[3] = pos->a;
-
sasha_89
- Новичок
- Сообщения: 32
- Зарегистрирован: 11 ноя 2014, 21:51
- Репутация: 0
- Настоящее имя: Aleksandr
- Контактная информация:
Re: Настройка кинематики в EMC2
а joints[0] - что тогда ?UAVpilot писал(а):перевожу на язык LinuxCNC:
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Настройка кинематики в EMC2
Ну я ж не буквально перевожу, а лишь по смыслу. Конфиги свои уж сами правьте.sasha_89 писал(а):а joints[0] - что тогда ?
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
sasha_89
- Новичок
- Сообщения: 32
- Зарегистрирован: 11 ноя 2014, 21:51
- Репутация: 0
- Настоящее имя: Aleksandr
- Контактная информация:
Re: Настройка кинематики в EMC2
проблемы с делением на ноль A = atan2(dx, dy)!!! как решить ???
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Настройка кинематики в EMC2
Очевидно проверить на ноль перед делением... 
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- Сергей Саныч
- Мастер
- Сообщения: 9116
- Зарегистрирован: 30 май 2012, 14:20
- Репутация: 2858
- Откуда: Тюмень
- Контактная информация:
Re: Настройка кинематики в EMC2
А разве в этой функции (с двумя аргументами) возникает проблема с делением на 0? я, правда не знаю, про какой язык речь.sasha_89 писал(а):проблемы с делением на ноль A = atan2(dx, dy)!!! как решить ???
Чудес не бывает. Бывают фокусы.
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: Настройка кинематики в EMC2
всё там должно работать.. ===================sasha_89 писал(а):проблемы с делением на ноль A = atan2(dx, dy)!!! как решить ???
sasha_89, а как "выглядят" проблемы? как ругается?
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Настройка кинематики в EMC2
Да и не должно оно ругаться.
Код: Выделить всё
$ man atan2
ИМЯ
atan2, atan2f, atan2l - функция вычисления арктангенcа двух переменных
....
ОШИБКИ
Ошибки не возникают.
....
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- Dmaster
- Мастер
- Сообщения: 1272
- Зарегистрирован: 15 июл 2011, 13:36
- Репутация: 476
- Контактная информация:
Re: Настройка кинематики в EMC2
Встала задача написать кинематику для горизонтально-фрезерного станка с поворотным столом. Кинематика в виде XYZBUW
Скачал разные файлы кинематик, прочел ветку, но так и не смог понять "как".
Во первых, до меня дошло, что машинный 0 станка придется делать по середине стола (X,Z), а не с краю рабочей зоны. Иначе задолбаюсь переписывать её при каждом снятии датчика .
Так вот. Кто какие кинематики пробовал, и какую лучше ковырять.
Варинтов не много
maxkins (поворотная голова в координте B и поворотный стол в координте С )
5axiskins по сути то-же самое.
На сколько я понимаю, то надо переделать вариант расчета поворта С на B, но я ни фига не понимаю( код.
Скачал разные файлы кинематик, прочел ветку, но так и не смог понять "как".
Во первых, до меня дошло, что машинный 0 станка придется делать по середине стола (X,Z), а не с краю рабочей зоны. Иначе задолбаюсь переписывать её при каждом снятии датчика .
Так вот. Кто какие кинематики пробовал, и какую лучше ковырять.
Варинтов не много
maxkins (поворотная голова в координте B и поворотный стол в координте С )
5axiskins по сути то-же самое.
На сколько я понимаю, то надо переделать вариант расчета поворта С на B, но я ни фига не понимаю( код.
" Linux CNC - наше всё"
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Настройка кинематики в EMC2
Если я правильно понял, то нужно взять 5axiskins и поменять V на U (с поправкой ориентации).
Тут чистая геометрия, ну и конечно надо в голове все эти движения представлять...
А код там не сложный, правда если разумеешь языки программирования. Если нет, то начинать надо совсем не с кинематики... Или заказывать ниписание оной...
Тут чистая геометрия, ну и конечно надо в голове все эти движения представлять...
А код там не сложный, правда если разумеешь языки программирования. Если нет, то начинать надо совсем не с кинематики... Или заказывать ниписание оной...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- Dmaster
- Мастер
- Сообщения: 1272
- Зарегистрирован: 15 июл 2011, 13:36
- Репутация: 476
- Контактная информация:
Re: Настройка кинематики в EMC2
тут конечно проблема) станков я собрал уже 6 , но с кинематикой не сталкивался)UAVpilot писал(а):А код там не сложный, правда если разумеешь языки программирования.
Станок уже работает прекрасно, но встала задача) Выбора нет-надо делать.UAVpilot писал(а):Если нет, то начинать надо совсем не с кинематики
ну примерно да) только С на B и V на UUAVpilot писал(а):Если я правильно понял, то нужно взять 5axiskins и поменять V на U (с поправкой ориентации).
" Linux CNC - наше всё"
- Dmaster
- Мастер
- Сообщения: 1272
- Зарегистрирован: 15 июл 2011, 13:36
- Репутация: 476
- Контактная информация:
Re: Настройка кинематики в EMC2
Ну что-ж начну разбор. 120 строк кода. Думаю запинаю его.
вопрос номер РАЗ
а нафига нам подгружать файл другой кучерявой кинематики? Мы туда ссылаться будем, на какие-то переменные? не лучше-ль сразу сюды необходимый кусок кода сунуть?
2
Пока хватит
Код: Выделить всё
#include "kinematics.h" /* these decls */
#include "posemath.h"
#include "hal.h"
#include "rtapi_math.h"
#define d2r(d) ((d)*PM_PI/180.0)
#define r2d(r) ((r)*180.0/PM_PI)
struct haldata {
hal_float_t *pivot_length;
} *haldata;
static PmCartesian s2r(double r, double t, double p) {
PmCartesian c;
t = d2r(t), p = d2r(p);
c.x = r * sin(p) * cos(t);
c.y = r * sin(p) * sin(t);
c.z = r * cos(p);
return c;
}
int kinematicsForward(const double *joints,
EmcPose * pos,
const KINEMATICS_FORWARD_FLAGS * fflags,
KINEMATICS_INVERSE_FLAGS * iflags)
{
PmCartesian r = s2r(*(haldata->pivot_length) + joints[8], joints[5], 180.0 - joints[4]);
pos->tran.x = joints[0] + r.x;
pos->tran.y = joints[1] + r.y;
pos->tran.z = joints[2] + *(haldata->pivot_length) + r.z;
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)
{
PmCartesian r = s2r(*(haldata->pivot_length) + pos->w, pos->c, 180.0 - pos->b);
joints[0] = pos->tran.x - r.x;
joints[1] = pos->tran.y - r.y;
joints[2] = pos->tran.z - *(haldata->pivot_length) - r.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_BOTH;
}
#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) {
int result;
comp_id = hal_init("5axiskins");
if(comp_id < 0) return comp_id;
haldata = hal_malloc(sizeof(struct haldata));
result = hal_pin_float_new("5axiskins.pivot-length", HAL_IO, &(haldata->pivot_length), comp_id);
if(result < 0) goto error;
*(haldata->pivot_length) = 250.0;
hal_ready(comp_id);
return 0;
error:
hal_exit(comp_id);
return result;
}
void rtapi_app_exit(void) { hal_exit(comp_id); }#include "kinematics.h"
а нафига нам подгружать файл другой кучерявой кинематики? Мы туда ссылаться будем, на какие-то переменные? не лучше-ль сразу сюды необходимый кусок кода сунуть?
2
Создаем некий макрос, который потом при ссылке на него будет вычисляться.. тут ясно, но вот откуда приперлась переменная PM_PI и что это такое?.define d2r(d) ((d)*PM_PI/180.0)
Это , как я понял мы создаем в хале новый пин.struct haldata {
hal_float_t *pivot_length;
} *haldata;
тут мы объявляем статические локальные переменные, но вот что такое double мне не ясно нифига.static PmCartesian s2r(double r, double t, double p) {
Пока хватит
" Linux CNC - наше всё"
