Страница 2 из 10

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

Добавлено: 14 ноя 2014, 12:27
nkp
Nick писал(а):      joints[4] = arctg(pos->tran.x/pos->tran.y);   
   joints[1] = sqrt(pos->tran.x**2 + pos->tran.y**2)
только проверить без реальной машины затруднительно))
в частности:
все ли "варианты" со знаками учтены :thinking:

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

Добавлено: 14 ноя 2014, 12:34
Nick
Знач надо проверять :).

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

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

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

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

sudo comp --install  angularkins.c
и вывод сюда.

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

Добавлено: 14 ноя 2014, 12:42
nkp
nkp писал(а):только проверить без реальной машины затруднительно
ну наверно все таки можно :
просто смотреть на пинах осей "движение" ...
=========
я так понял вместо comp сейчас halcompile
что то он у меня пока не компилит)
кто пробовал уже?

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

Добавлено: 14 ноя 2014, 12:49
nkp
sasha_89, да - обновиться очень бы не помешало...
старая версия емс на 6-й убунте (2.3 по моему)

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

Добавлено: 14 ноя 2014, 13:07
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:~/Загрузки$

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

Добавлено: 14 ноя 2014, 13:08
sasha_89
или что-то не так делаю?

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

Добавлено: 14 ноя 2014, 13:41
nkp
замени "arctg" на "atan"
==========
и старайся не пользовать кириллицу (я про папку Загрузки)

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

Добавлено: 14 ноя 2014, 13:46
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);

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

Добавлено: 14 ноя 2014, 13:57
nkp
или вычислять гипотенузу через катет и угол:

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

	{
		A = atan(pos->tran.x/pos->tran.y);
		joints[4] = A;
		joints[1] = pos->tran.x / cos(A);
	}

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

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

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

      joints[4] = atan(pos->tran.x/pos->tran.y);
      joints[1] = pos->tran.x / cos(joints[4]);

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

Добавлено: 14 ноя 2014, 14:28
nkp
вот так точно работает:
A = atan2(dx, dy)
применяли на реальном станке...
=====================
(кстати atan vs atan2 = ???)
может так мы обходим ситуацию ,когда pos->tran.y равна нулю...

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

Добавлено: 14 ноя 2014, 16:00
Nick
nkp писал(а):(кстати atan vs atan2 = ???)
может так мы обходим ситуацию ,когда pos->tran.y равна нулю...
именно. кстати да, так удобнее.
nkp писал(а):или вычислять гипотенузу через катет и угол:
это хуже, т.к. появляется деление - есть возможность делить на 0. Да и cos может быть меньше нуля.
А формула sqrt(x*x+y*y) будет работать без исключений (разве что переполнение по x*x)/

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

Добавлено: 14 ноя 2014, 16:04
nkp
а здесь как с делением на ноль:
joints[4] = atan(pos->tran.x/pos->tran.y);

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

Добавлено: 14 ноя 2014, 16:05
Nick
А здесь уже никак, поэтому большое условие. Но atan2 - рулит :)

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

Добавлено: 14 ноя 2014, 20:05
milo
А что, постпроцессоров под полярную обработку разве не существует? Это на тот случай ,если с описанием кинематики возникнут проблемы.

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

Добавлено: 14 ноя 2014, 20:11
nkp
milo писал(а):А что, постпроцессоров под полярную обработку разве не существует? Это на тот случай ,если с описанием кинематики возникнут проблемы.
можно пойти и этим путем...
может с учетом ручных перемещений это и правильней...
================

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

Добавлено: 14 ноя 2014, 20:15
Nick
milo писал(а):А что, постпроцессоров под полярную обработку разве не существует? Это на тот случай ,если с описанием кинематики возникнут проблемы.
В просмотре программы будет непонятно что...
А, разве что делать все в XZB...
nkp писал(а):может с учетом ручных перемещений это и правильней...
А в ручных будет тоже в кинематике ездить. Главный вопрос в том, что станок будет делать и как с ним будет удобнее работать...

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

Добавлено: 14 ноя 2014, 20:16
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 команды:
(для просмотра содержимого нажмите на ссылку)
Выделение_076.png (1924 просмотра) <a class='original' href='./download/file.php?id=36643&mode=view' target=_blank>Загрузить оригинал (85.29 КБ)</a>
Выделение_077.png (1924 просмотра) <a class='original' href='./download/file.php?id=36644&mode=view' target=_blank>Загрузить оригинал (83.38 КБ)</a>

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

Добавлено: 14 ноя 2014, 20:18
nkp
Nick писал(а):А в ручных будет тоже в кинематике ездить.
будет - но как?
как например вручную повернуть "поворотку" ?

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

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