Настройка кинематики в EMC2

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
sasha_89
Новичок
Сообщения: 32
Зарегистрирован: 11 ноя 2014, 21:51
Репутация: 0
Настоящее имя: Aleksandr
Контактная информация:

Re: Настройка кинематики в EMC2

Сообщение sasha_89 »

да нет - я не понял!
у меня задача - настроить так чтоб emc2 самая считала и выдавала те параметры чтоб было так как привел выше #62 -
например нарисовал линию закидаю в emc2 а она пусть самая считает G-кода!!!
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Настройка кинематики в EMC2

Сообщение nkp »

sasha_89 писал(а):нарисовал линию
где нарисовал? в какой программе?
sasha_89 писал(а):закидаю в emc2
"закидаю" именно "линию"? или Gкод "линии" ?
============
если не секрет - что будет делать аппарат??
sasha_89
Новичок
Сообщения: 32
Зарегистрирован: 11 ноя 2014, 21:51
Репутация: 0
Настоящее имя: Aleksandr
Контактная информация:

Re: Настройка кинематики в EMC2

Сообщение sasha_89 »

тю наверное G-кода линии!! :)
извини меня за мою тупость! :D
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Настройка кинематики в EMC2

Сообщение nkp »

sasha_89 писал(а):наверное G-кода линии!!
давай напишем Gкод квадрата , на котором будем тестить твой аппарат...
ну в смысле ты напиши Gкод квадрата 5x5 (например) , и выложи сюда ...
sasha_89
Новичок
Сообщения: 32
Зарегистрирован: 11 ноя 2014, 21:51
Репутация: 0
Настоящее имя: Aleksandr
Контактная информация:

Re: Настройка кинематики в EMC2

Сообщение sasha_89 »

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

Re: Настройка кинематики в EMC2

Сообщение Serg »

перевожу на язык LinuxCNC:
2530420.gif
2530420.gif (1.62 КБ) 1800 просмотров
;)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Настройка кинематики в EMC2

Сообщение Nick »

Судя по файлу кинематики у тебя поворотная ось имеет номер 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 должен начать меняться.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Настройка кинематики в EMC2

Сообщение nkp »

Nick,тс поставил кинематику такую
===========
он выложил свой конфиг самый последний ...
========
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Настройка кинематики в EMC2

Сообщение Nick »

Тогда тут должно быть наверное 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

Сообщение sasha_89 »

UAVpilot писал(а):перевожу на язык LinuxCNC:
2530420.gif
;)
а joints[0] - что тогда ?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Настройка кинематики в EMC2

Сообщение Serg »

sasha_89 писал(а):а joints[0] - что тогда ?
Ну я ж не буквально перевожу, а лишь по смыслу. Конфиги свои уж сами правьте. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
sasha_89
Новичок
Сообщения: 32
Зарегистрирован: 11 ноя 2014, 21:51
Репутация: 0
Настоящее имя: Aleksandr
Контактная информация:

Re: Настройка кинематики в EMC2

Сообщение sasha_89 »

проблемы с делением на ноль A = atan2(dx, dy)!!! как решить ???
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Настройка кинематики в EMC2

Сообщение Serg »

Очевидно проверить на ноль перед делением... :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Настройка кинематики в EMC2

Сообщение Сергей Саныч »

sasha_89 писал(а):проблемы с делением на ноль A = atan2(dx, dy)!!! как решить ???
А разве в этой функции (с двумя аргументами) возникает проблема с делением на 0? я, правда не знаю, про какой язык речь.
Чудес не бывает. Бывают фокусы.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Настройка кинематики в EMC2

Сообщение nkp »

sasha_89 писал(а):проблемы с делением на ноль A = atan2(dx, dy)!!! как решить ???
всё там должно работать..
Выделение_018.png (1683 просмотра) <a class='original' href='./download/file.php?id=37746&mode=view' target=_blank>Загрузить оригинал (135.38 КБ)</a>
===================
sasha_89, а как "выглядят" проблемы? как ругается?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Настройка кинематики в EMC2

Сообщение Serg »

Да и не должно оно ругаться.

Код: Выделить всё

$ man atan2
ИМЯ
       atan2, atan2f, atan2l - функция вычисления арктангенcа двух переменных
....
ОШИБКИ
       Ошибки не возникают.
....
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Dmaster
Мастер
Сообщения: 1272
Зарегистрирован: 15 июл 2011, 13:36
Репутация: 476
Контактная информация:

Re: Настройка кинематики в EMC2

Сообщение Dmaster »

Встала задача написать кинематику для горизонтально-фрезерного станка с поворотным столом. Кинематика в виде XYZBUW
Скачал разные файлы кинематик, прочел ветку, но так и не смог понять "как".

Во первых, до меня дошло, что машинный 0 станка придется делать по середине стола (X,Z), а не с краю рабочей зоны. Иначе задолбаюсь переписывать её при каждом снятии датчика .

Так вот. Кто какие кинематики пробовал, и какую лучше ковырять.
Варинтов не много
maxkins (поворотная голова в координте B и поворотный стол в координте С )
5axiskins по сути то-же самое.
На сколько я понимаю, то надо переделать вариант расчета поворта С на B, но я ни фига не понимаю( код.
" Linux CNC - наше всё"
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Настройка кинематики в EMC2

Сообщение Serg »

Если я правильно понял, то нужно взять 5axiskins и поменять V на U (с поправкой ориентации).
Тут чистая геометрия, ну и конечно надо в голове все эти движения представлять... :)

А код там не сложный, правда если разумеешь языки программирования. Если нет, то начинать надо совсем не с кинематики... Или заказывать ниписание оной...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Dmaster
Мастер
Сообщения: 1272
Зарегистрирован: 15 июл 2011, 13:36
Репутация: 476
Контактная информация:

Re: Настройка кинематики в EMC2

Сообщение Dmaster »

UAVpilot писал(а):А код там не сложный, правда если разумеешь языки программирования.
тут конечно проблема) станков я собрал уже 6 , но с кинематикой не сталкивался)
UAVpilot писал(а):Если нет, то начинать надо совсем не с кинематики
Станок уже работает прекрасно, но встала задача) Выбора нет-надо делать.
UAVpilot писал(а):Если я правильно понял, то нужно взять 5axiskins и поменять V на U (с поправкой ориентации).
ну примерно да) только С на B и V на U
" Linux CNC - наше всё"
Аватара пользователя
Dmaster
Мастер
Сообщения: 1272
Зарегистрирован: 15 июл 2011, 13:36
Репутация: 476
Контактная информация:

Re: Настройка кинематики в EMC2

Сообщение Dmaster »

Ну что-ж начну разбор. 120 строк кода. Думаю запинаю его.

Код: Выделить всё

#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
define d2r(d) ((d)*PM_PI/180.0)
Создаем некий макрос, который потом при ссылке на него будет вычисляться.. тут ясно, но вот откуда приперлась переменная PM_PI и что это такое?.
struct haldata {
hal_float_t *pivot_length;
} *haldata;
Это , как я понял мы создаем в хале новый пин.
static PmCartesian s2r(double r, double t, double p) {
тут мы объявляем статические локальные переменные, но вот что такое double мне не ясно нифига.
Пока хватит
" Linux CNC - наше всё"
Ответить

Вернуться в «LinuxCNC»