Все-таки SCARA

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
РЕКЛАМА
Почётный участник
Почётный участник
Сообщения: 736
Зарегистрирован: 11 дек 2012, 21:46
Репутация: 80
Откуда: Брянск
Контактная информация:

Re: Все-таки SCARA

Сообщение РЕКЛАМА »

непомогло.
Еще пару косяков:
В "режиме координат" при перемещении по осям ХиY почему-то идет перемещение по оси С (вижу что меняется координата)

в настойках ини на ось Z стот "HOME =25.000" если ставлю "0" то при нажаатии кнопки "все в ноль" ось Z дергется, выакивает все та-же ошибка и ось остается незахомленной.
Аватара пользователя
РЕКЛАМА
Почётный участник
Почётный участник
Сообщения: 736
Зарегистрирован: 11 дек 2012, 21:46
Репутация: 80
Откуда: Брянск
Контактная информация:

Re: Все-таки SCARA

Сообщение РЕКЛАМА »

А если в режие ккоординаат пробовать крутить С то меняются коордиинаты X и Y
Оси все-еще не ездят. выпадает ошибка.
Где может паразитный сигнал между осями пролезать?
Или может как-то всё-таки выппилить ось С?

В архиве то что есть на данный момент.
Вложения
sim.tar
(30 КБ) 360 скачиваний
Аватара пользователя
РЕКЛАМА
Почётный участник
Почётный участник
Сообщения: 736
Зарегистрирован: 11 дек 2012, 21:46
Репутация: 80
Откуда: Брянск
Контактная информация:

Re: Все-таки SCARA

Сообщение РЕКЛАМА »

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

Re: Все-таки SCARA

Сообщение nkp »

РЕКЛАМА писал(а):Или может и должна меняться С при работе других осей инаоборот
я тоже так думаю...
надо до конца разобраться с
setp scarakins.D1 490
setp scarakins.D2 340
setp scarakins.D3 50
setp scarakins.D4 250
setp scarakins.D5 50
setp scarakins.D6 50
что куда относится , нарисовать ...
потом станет понятней - какая их зависимость...
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Все-таки SCARA

Сообщение Serg »

РЕКЛАМА писал(а):В "режиме координат" при перемещении по осям ХиY почему-то идет перемещение по оси С (вижу что меняется координата)
РЕКЛАМА писал(а):А если в режие ккоординаат пробовать крутить С то меняются коордиинаты X и Y
Всё правильно, так и должно быть - это обусловлено конфигурацией кинематики. При движении по X и Y у тебя поворачивается второй сустав и соотв. меняется ориентация в пространстве третьего сустава (C), вот оно и отрабатывает для компенсации.
Во втором случае надо помнить, что по X и Y перемещается кончик инструмента, который при этом должен сохранять свою ориентацию, т.е. причина та-же.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
РЕКЛАМА
Почётный участник
Почётный участник
Сообщения: 736
Зарегистрирован: 11 дек 2012, 21:46
Репутация: 80
Откуда: Брянск
Контактная информация:

Re: Все-таки SCARA

Сообщение РЕКЛАМА »

Вырисовал исходя из формул кинематики.
Вложения
scarakins.png (3329 просмотров) <a class='original' href='./download/file.php?id=38948&mode=view' target=_blank>Загрузить оригинал (36.85 КБ)</a>
Аватара пользователя
РЕКЛАМА
Почётный участник
Почётный участник
Сообщения: 736
Зарегистрирован: 11 дек 2012, 21:46
Репутация: 80
Откуда: Брянск
Контактная информация:

Re: Все-таки SCARA

Сообщение РЕКЛАМА »

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

Re: Все-таки SCARA

Сообщение nkp »

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

Re: Все-таки SCARA

Сообщение nkp »

прямая кинематика:

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

int kinematicsForward(const double * joint,
                      EmcPose * world,
                      const KINEMATICS_FORWARD_FLAGS * fflags,
                      KINEMATICS_INVERSE_FLAGS * iflags)
{
    double a0, a1, a3;
    double x, y, z, c;

/* convert joint angles to radians for sin() and cos() */

    a0 = joint[0] * ( PM_PI / 180 );
    a1 = joint[1] * ( PM_PI / 180 );
    a3 = joint[3] * ( PM_PI / 180 );
/* convert angles into world coords */

    a1 = a1 + a0;
    a3 = a3 + a1;

    x = D2*cos(a0) + D4*cos(a1) + D6*cos(a3);
    y = D2*sin(a0) + D4*sin(a1) + D6*sin(a3);
    z = D1 + D3 - joint[2] - D5;
    c = a3;
	
    *iflags = 0;
    if (joint[1] < 90)
	*iflags = 1;
	
    world->tran.x = x;
    world->tran.y = y;
    world->tran.z = z;
    world->c = c * 180 / PM_PI;
	
    world->a = joint[4];
    world->b = joint[5];
	
    return (0);
}
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Все-таки SCARA

Сообщение nkp »

обратная кинематика :

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

int kinematicsInverse(const EmcPose * world,
                      double * joint,
                      const KINEMATICS_INVERSE_FLAGS * iflags,
                      KINEMATICS_FORWARD_FLAGS * fflags)
{
    double a3;
    double q0, q1;
    double xt, yt, rsq, cc;
    double x, y, z, c;

    x = world->tran.x;
    y = world->tran.y;
    z = world->tran.z;
    c = world->c;

    /* convert degrees to radians */
    a3 = c * ( PM_PI / 180 );

    /* center of end effector (correct for D6) */
    xt = x - D6*cos(a3);
    yt = y - D6*sin(a3);

    /* horizontal distance (squared) from end effector centerline
	to main column centerline */
    rsq = xt*xt + yt*yt;
    /* joint 1 angle needed to make arm length match sqrt(rsq) */
    cc = (rsq - D2*D2 - D4*D4) / (2*D2*D4);
    if(cc < -1) cc = -1;
    if(cc > 1) cc = 1;
    q1 = acos(cc);

    if (*iflags)
	q1 = -q1;

    /* angle to end effector */
    q0 = atan2(yt, xt);

    /* end effector coords in inner arm coord system */
    xt = D2 + D4*cos(q1);
    yt = D4*sin(q1);

    /* inner arm angle */
    q0 = q0 - atan2(yt, xt);

    /* q0 and q1 are still in radians. convert them to degrees */
    q0 = q0 * (180 / PM_PI);
    q1 = q1 * (180 / PM_PI);

    joint[0] = q0;
    joint[1] = q1;
    joint[2] = D1 + D3 - D5 - z;
    joint[3] = c - ( q0 + q1);
    joint[4] = world->a;
    joint[5] = world->b;

    *fflags = 0;

    return (0);
}
Аватара пользователя
РЕКЛАМА
Почётный участник
Почётный участник
Сообщения: 736
Зарегистрирован: 11 дек 2012, 21:46
Репутация: 80
Откуда: Брянск
Контактная информация:

Re: Все-таки SCARA

Сообщение РЕКЛАМА »

А толку?
Я не смог залезть в файл кинематики..


Влияния осей и не должно быть изначально. Это где-то ошибка.
Я загрузил дефолтную скару со стандартными настройками сочленений. Так вот там, когда крутишь "С" станок в симуляции шевелится, но координаты XY не меняются, и наоборот, если крутить XY то положение С в пространстве остается неизменным.
Что логично, ибо эти компенсации отслеживает непосредственно сама кинематика, и если есть координата точки (XYZ) то вращение "эффектора" не должно на нее влиять. и наоборот движение XY не должны влиять на изначальное положение "эффектора".

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

Re: Все-таки SCARA

Сообщение Nick »

Ошибка следования до сих пор вылетает?
Чему при этом равен axis.n.f-error для оси с ошибкой?

Поставь min_ferror = 5, потом с ним можно будет отдельно разобраться.. И да, в traj уменьшь максимальную скорость.

Я правильно понимаю, что эти параметры нигде не учитываются:
INPUT_SCALE = 4000
OUTPUT_SCALE = 1.000

Серво период большеват
SERVO_PERIOD = 10000000
SERVO_PERIOD = 10 000 000
И этот тоже
TRAJ_PERIOD = 100 000 000

Обычно они в 10 раз меньше.
Аватара пользователя
РЕКЛАМА
Почётный участник
Почётный участник
Сообщения: 736
Зарегистрирован: 11 дек 2012, 21:46
Репутация: 80
Откуда: Брянск
Контактная информация:

Re: Все-таки SCARA

Сообщение РЕКЛАМА »

вылетает.
Все настройки в .ini идентичны дефолтным (кроме пределов и феррор счас 5.000)

Выглядит так:
запускаемся, обнуляемся, переходим в режим координат. двигаем любую координату некоторое время (от 3 до 7 секунд) все ездит. потом, по прошествии этого времени выключается с ошибкой. включаемся обратно, едем 1-2 сек (или доезжает само то что не доехало до ошибки) опять ошибка . ошибки по всем осям выскакивают, по 2-3 за раз. вот после первой ошибки и возникает пляска координат на соседних осях, в режиме сочленений тоже самое.
Попробую менять периоды и мин феррор и посмотреть axis.n.f-error...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Все-таки SCARA

Сообщение nkp »

в этой же конфигурации ставишь обычную кинематику - и все летает :freak:
чтоЙто тут не так :thinking:
Аватара пользователя
solo
Мастер
Сообщения: 1374
Зарегистрирован: 20 окт 2011, 18:39
Репутация: 272
Настоящее имя: Юрий Соловьев
Откуда: Украина Харьков
Контактная информация:

Re: Все-таки SCARA

Сообщение solo »

а если в ини файле в разделе [TRAJ]
уменьшить значение
MAX_VELOCITY = 600.0 на меньшее (ну допустим поставить 50 )
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Все-таки SCARA

Сообщение Serg »

РЕКЛАМА писал(а):так-же не отображается в линейных координатах вращение оси С.
Ну правльно - координаты X и Y кончика инструмента при этом ведь не меняются.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
РЕКЛАМА
Почётный участник
Почётный участник
Сообщения: 736
Зарегистрирован: 11 дек 2012, 21:46
Репутация: 80
Откуда: Брянск
Контактная информация:

Re: Все-таки SCARA

Сообщение РЕКЛАМА »

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

Re: Все-таки SCARA

Сообщение Nick »

хммм а в чем основное отличие дефолтной скары от твоей?
Аватара пользователя
РЕКЛАМА
Почётный участник
Почётный участник
Сообщения: 736
Зарегистрирован: 11 дек 2012, 21:46
Репутация: 80
Откуда: Брянск
Контактная информация:

Re: Все-таки SCARA

Сообщение РЕКЛАМА »

Это тот что я мучааю.

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

# core HAL config file for simulation - 4 axis

# load RT modules
loadrt scarakins
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt ddt count=12
###############################
loadrt stepgen step_type=0,0,0,0


addf stepgen.make-pulses base-thread
addf stepgen.capture-position servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf stepgen.update-freq servo-thread
###############################

# add motion controller functions to servo thread

addf ddt.0 servo-thread
addf ddt.1 servo-thread
addf ddt.2 servo-thread
addf ddt.3 servo-thread
addf ddt.4 servo-thread
addf ddt.5 servo-thread
addf ddt.6 servo-thread
addf ddt.7 servo-thread
addf ddt.8 servo-thread

# create HAL signals for position commands from motion module
net J0cmd <= axis.0.motor-pos-cmd => stepgen.0.position-cmd
net J1cmd <= axis.1.motor-pos-cmd => stepgen.1.position-cmd
net J2cmd <= axis.2.motor-pos-cmd => stepgen.2.position-cmd
net J3cmd <= axis.5.motor-pos-cmd => stepgen.3.position-cmd


# loop position commands back to motion module feedback
net J0fb => stepgen.0.position-fb => axis.0.motor-pos-fb
net J1fb => stepgen.1.position-fb => axis.1.motor-pos-fb
net J2fb => stepgen.2.position-fb => axis.2.motor-pos-fb
net J3fb => stepgen.3.position-fb => axis.5.motor-pos-fb


# send the position commands thru differentiators to
# generate velocity and accel signals
# define the signals, and hook them up
net J0pos => ddt.0.in
net J0vel <= ddt.0.out
net J0vel => ddt.1.in
net J0acc <= ddt.1.out

net J1pos => ddt.2.in
net J1vel <= ddt.2.out
net J1vel => ddt.3.in
net J1acc <= ddt.3.out

net J2pos => ddt.4.in
net J2vel <= ddt.4.out
net J2vel => ddt.5.in
net J2acc <= ddt.5.out

net J3pos => ddt.6.in
net J3vel <= ddt.6.out
net J3vel => ddt.7.in
net J3acc <= ddt.7.out

# estop loopback
net estop-loop iocontrol.0.user-enable-out iocontrol.0.emc-enable-in

# create signals for tool loading loopback
net tool-prep-loop iocontrol.0.tool-prepare iocontrol.0.tool-prepared
net tool-change-loop iocontrol.0.tool-change iocontrol.0.tool-changed

# amp control
net xena axis.0.amp-enable-out => stepgen.0.enable
net yena axis.1.amp-enable-out => stepgen.1.enable
net zena axis.2.amp-enable-out => stepgen.2.enable
net aena axis.3.amp-enable-out => stepgen.3.enable

# connect signals to step pulse generator outputs
net 0step <= stepgen.0.step
net 0dir  <= stepgen.0.dir
net 1step <= stepgen.1.step
net 1dir  <= stepgen.1.dir
net 2step <= stepgen.2.step
net 2dir  <= stepgen.2.dir
net 3step <= stepgen.3.step
net 3dir  <= stepgen.3.dir

# set stepgen module scaling - get values from ini file
setp stepgen.0.position-scale [AXIS_0]SCALE
setp stepgen.1.position-scale [AXIS_1]SCALE
setp stepgen.2.position-scale [AXIS_2]SCALE
setp stepgen.3.position-scale [AXIS_5]SCALE

# set stepgen module accel limits - get values from ini file
setp stepgen.0.maxaccel [AXIS_0]STEPGEN_MAXACCEL
setp stepgen.1.maxaccel [AXIS_1]STEPGEN_MAXACCEL
setp stepgen.2.maxaccel [AXIS_2]STEPGEN_MAXACCEL
setp stepgen.3.maxaccel [AXIS_5]STEPGEN_MAXACCEL

net xflt axis.0.amp-fault-in
net yflt axis.1.amp-fault-in
net zflt axis.2.amp-fault-in
net aflt axis.5.amp-fault-in



loadusr -W scaragui

net j0 axis.0.joint-pos-fb scaragui.joint0
net j1 axis.1.joint-pos-fb scaragui.joint1
net j2 axis.2.joint-pos-fb scaragui.joint2
net j3 axis.5.joint-pos-fb scaragui.joint3

setp scarakins.D1 110
setp scarakins.D2 90
setp scarakins.D3 0
setp scarakins.D4 80
setp scarakins.D5 20
setp scarakins.D6 0

Это дефолтный:

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

# core HAL config file for simulation - 4 axis

# load RT modules
loadrt scarakins
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD traj_period_nsec=[EMCMOT]TRAJ_PERIOD num_joints=[TRAJ]AXES
loadrt ddt count=12

# add motion controller functions to servo thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf ddt.0 servo-thread
addf ddt.1 servo-thread
addf ddt.2 servo-thread
addf ddt.3 servo-thread
addf ddt.4 servo-thread
addf ddt.5 servo-thread
addf ddt.6 servo-thread
addf ddt.7 servo-thread
addf ddt.8 servo-thread

# create HAL signals for position commands from motion module
net J0pos <= axis.0.motor-pos-cmd
net J1pos <= axis.1.motor-pos-cmd
net J2pos <= axis.2.motor-pos-cmd
net J3pos <= axis.3.motor-pos-cmd


# loop position commands back to motion module feedback
net J0pos => axis.0.motor-pos-fb
net J1pos => axis.1.motor-pos-fb
net J2pos => axis.2.motor-pos-fb
net J3pos => axis.3.motor-pos-fb

# send the position commands thru differentiators to
# generate velocity and accel signals
# define the signals, and hook them up
net J0pos => ddt.0.in
net J0vel <= ddt.0.out
net J0vel => ddt.1.in
net J0acc <= ddt.1.out

net J1pos => ddt.2.in
net J1vel <= ddt.2.out
net J1vel => ddt.3.in
net J1acc <= ddt.3.out

net J2pos => ddt.4.in
net J2vel <= ddt.4.out
net J2vel => ddt.5.in
net J2acc <= ddt.5.out

net J3pos => ddt.6.in
net J3vel <= ddt.6.out
net J3vel => ddt.7.in
net J3acc <= ddt.7.out

# estop loopback
net estop-loop iocontrol.0.user-enable-out iocontrol.0.emc-enable-in

# create signals for tool loading loopback
net tool-prep-loop iocontrol.0.tool-prepare iocontrol.0.tool-prepared
net tool-change-loop iocontrol.0.tool-change iocontrol.0.tool-changed

# amp control
net xena axis.0.amp-enable-out
net yena axis.1.amp-enable-out
net zena axis.2.amp-enable-out
net aena axis.3.amp-enable-out

net xflt axis.0.amp-fault-in
net yflt axis.1.amp-fault-in
net zflt axis.2.amp-fault-in
net aflt axis.3.amp-fault-in

loadusr -W scaragui

net j0 axis.0.joint-pos-fb scaragui.joint0
net j1 axis.1.joint-pos-fb scaragui.joint1
net j2 axis.2.joint-pos-fb scaragui.joint2
net j3 axis.3.joint-pos-fb scaragui.joint3
Я не моу онять логику файла.
Мне эи буковкки уже снятся :shock:
Аватара пользователя
PKM
Почётный участник
Почётный участник
Сообщения: 4263
Зарегистрирован: 31 мар 2011, 18:11
Репутация: 705
Настоящее имя: Андрей
Откуда: Украина
Контактная информация:

Re: Все-таки SCARA

Сообщение PKM »

Все эти ddt здесь вообще не нужны.

Я бы попробовал сделать в stepconf и отладить обычный конфиг на 4 оси. Потом сменить trivkins на scarakins.
Ответить

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