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

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

Nick писал(а):      joints[4] = arctg(pos->tran.x/pos->tran.y);   
   joints[1] = sqrt(pos->tran.x**2 + pos->tran.y**2)
только проверить без реальной машины затруднительно))
в частности:
все ли "варианты" со знаками учтены :thinking:
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

Знач надо проверять :).

sasha_89, качай файл из моего сообщения.
потом заходишь в консоль и пишешь

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

sudo apt-get install linuxcnc-dev
это мы ставим доп пакеты.
потом
cd и директорию, где лежит скачаный файл.
потом

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

sudo comp --install  angularkins.c
и вывод сюда.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

nkp писал(а):только проверить без реальной машины затруднительно
ну наверно все таки можно :
просто смотреть на пинах осей "движение" ...
=========
я так понял вместо comp сейчас halcompile
что то он у меня пока не компилит)
кто пробовал уже?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

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

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

Сообщение sasha_89 »

смотрите такая фигня : что-то не выходит !
  • sasha@sasha-desktop:~$ sudo apt-get install linuxcnc-dev
    Чтение списков пакетов... Готово
    Построение дерева зависимостей
    Чтение информации о состоянии... Готово
    Уже установлена самая новая версия linuxcnc-dev.
    Следующие пакеты устанавливались автоматически и больше не требуются:
    user-setup localechooser-data
    Для их удаления используйте 'apt-get autoremove'.
    обновлено 0, установлено 0 новых пакетов, для удаления отмечено 0 пакетов, и 235 пакетов не обновлено.
    sasha@sasha-desktop:~$ cd /home/sasha/Загрузки
    sasha@sasha-desktop:~/Загрузки$ sudo comp --install angularkins.c
    make KBUILD_EXTRA_SYMBOLS=/usr/realtime-2.6.32-122-rtai/modules/linuxcnc/Module.symvers -C /usr/src/linux-headers-2.6.32-122-rtai SUBDIRS=`pwd` CC=gcc V=0 modules
    make[1]: Вход в каталог `/usr/src/linux-headers-2.6.32-122-rtai'
    CC [M] /tmp/tmplZ52nG/angularkins.o
    /tmp/tmplZ52nG/angularkins.c: In function ‘kinematicsInverse’:
    /tmp/tmplZ52nG/angularkins.c:55: error: implicit declaration of function ‘arctg’
    /tmp/tmplZ52nG/angularkins.c:56: error: invalid type argument of ‘unary *’ (have ‘int’)
    /tmp/tmplZ52nG/angularkins.c:56: error: invalid type argument of ‘unary *’ (have ‘int’)
    /tmp/tmplZ52nG/angularkins.c:57: error: expected ‘;’ before ‘}’ token
    make[2]: *** [/tmp/tmplZ52nG/angularkins.o] Ошибка 1
    make[1]: *** [_module_/tmp/tmplZ52nG] Ошибка 2
    make[1]: Выход из каталога `/usr/src/linux-headers-2.6.32-122-rtai'
    make: *** [modules] Ошибка 2
    sasha@sasha-desktop:~/Загрузки$
sasha_89
Новичок
Сообщения: 32
Зарегистрирован: 11 ноя 2014, 21:51
Репутация: 0
Настоящее имя: Aleksandr
Контактная информация:

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

Сообщение sasha_89 »

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

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

Сообщение nkp »

замени "arctg" на "atan"
==========
и старайся не пользовать кириллицу (я про папку Загрузки)
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

строку
joints[1] = sqrt(pos->tran.x**2 + pos->tran.y**2)
пока замени на
joints[1] = sqrt(pos->tran.x * pos->tran.x + pos->tran.y * pos->tran.y);
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

или вычислять гипотенузу через катет и угол:

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

	{
		A = atan(pos->tran.x/pos->tran.y);
		joints[4] = A;
		joints[1] = pos->tran.x / cos(A);
	}
Аватара пользователя
PKM
Почётный участник
Почётный участник
Сообщения: 4263
Зарегистрирован: 31 мар 2011, 18:11
Репутация: 705
Настоящее имя: Андрей
Откуда: Украина
Контактная информация:

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

Сообщение PKM »

nkp писал(а):или вычислять гипотенузу через катет и угол:
Только не забыть объявить переменную А
А если вообще без нее?

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

      joints[4] = atan(pos->tran.x/pos->tran.y);
      joints[1] = pos->tran.x / cos(joints[4]);
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

вот так точно работает:
A = atan2(dx, dy)
применяли на реальном станке...
=====================
(кстати atan vs atan2 = ???)
может так мы обходим ситуацию ,когда pos->tran.y равна нулю...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

nkp писал(а):(кстати atan vs atan2 = ???)
может так мы обходим ситуацию ,когда pos->tran.y равна нулю...
именно. кстати да, так удобнее.
nkp писал(а):или вычислять гипотенузу через катет и угол:
это хуже, т.к. появляется деление - есть возможность делить на 0. Да и cos может быть меньше нуля.
А формула sqrt(x*x+y*y) будет работать без исключений (разве что переполнение по x*x)/
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

а здесь как с делением на ноль:
joints[4] = atan(pos->tran.x/pos->tran.y);
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

А здесь уже никак, поэтому большое условие. Но atan2 - рулит :)
milo
Кандидат
Сообщения: 42
Зарегистрирован: 08 фев 2014, 19:08
Репутация: 5
Откуда: Гомель
Контактная информация:

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

Сообщение milo »

А что, постпроцессоров под полярную обработку разве не существует? Это на тот случай ,если с описанием кинематики возникнут проблемы.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

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

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

Сообщение Nick »

milo писал(а):А что, постпроцессоров под полярную обработку разве не существует? Это на тот случай ,если с описанием кинематики возникнут проблемы.
В просмотре программы будет непонятно что...
А, разве что делать все в XZB...
nkp писал(а):может с учетом ручных перемещений это и правильней...
А в ручных будет тоже в кинематике ездить. Главный вопрос в том, что станок будет делать и как с ним будет удобнее работать...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

по запуску кинематики angularkins:
так как не желает пока правильно работать halcompile (а может что другое))
изменил первую попавшуюся кинематику:
(для просмотра содержимого нажмите на ссылку)

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

/********************************************************************
* Description: angularkins.c
*   Angular kinematics for 3 axis with angular axis along Z
*
*   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 "posemath.h"
#include "hal.h"
#include "rtapi.h"
#include "rtapi_math.h"
#include "kinematics.h"		/* sudo halcompile --install angularkins_1.c */


int kinematicsForward(const double *joints,
		      EmcPose * pos,
		      const KINEMATICS_FORWARD_FLAGS * fflags,
		      KINEMATICS_INVERSE_FLAGS * iflags)
{
    pos->tran.x = joints[0]*cos(joints[4]);
    pos->tran.y = joints[0]*sin(joints[4]);;
    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)
		     
{
 	static double dx = 0 , dy = 0;
	if (pos->tran.x == 0)
	{
		joints[0] = pos->tran.y;
		if (pos->tran.y>0)
		{
			joints[4] = 1.570796327;
		} else {
		    joints[4] = -1.570796327;
	    }
	}
	else
	{
		dx = pos->tran.x;
		dy = pos->tran.y;
		joints[4] = atan2(dx,dy);
		joints[1] = sqrt(pos->tran.x * pos->tran.x + pos->tran.y * pos->tran.y);
	}
    
    joints[1] = pos->tran.y;
    joints[2] = pos->tran.z;
    joints[3] = pos->a;
    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("maxkins");
    if(comp_id > 0) {
	hal_ready(comp_id);
	return 0;
    }
    return comp_id;
}

void rtapi_app_exit(void) { hal_exit(comp_id); }
скрины после home и MDI команды:
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

Nick писал(а):А в ручных будет тоже в кинематике ездить.
будет - но как?
как например вручную повернуть "поворотку" ?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

убрал условия , привел к градусам:
Выделение_078.png (1893 просмотра) <a class='original' href='./download/file.php?id=36648&mode=view' target=_blank>Загрузить оригинал (123 КБ)</a>
Ответить

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