Страница 1 из 1

нетривиальная кинематика

Добавлено: 26 авг 2016, 18:48
aleha
Прошу совет в какую сторону копать.
Есть гексапод с приводом на моторах редукторах (на картинке привод внизу круглый) на нем же стоит энкодер который индицирует угловое положение выходного вала. Все это управляется 5I25+7I77 и LNC. С этой связкой проблем нет.
Выход редуктора, он вращается только пол оборота, через кривошип соединен с узлом линейного перемещения (прямоугольник сверху перемещается вверх вниз)
В LCNC даешь команду на перемещение оси на 100 дискрет он крутит редуктором проворачивает на 100 угловых дискрет.
Но верхнее звено линейно перемещает по синусоидальному закону. Как можно преобразовать сигнал энкодера чтоб в аксис он высвечивался после обработки специальной формулой.

Re: нетривиальная кинематика

Добавлено: 26 авг 2016, 19:14
nkp
"свою" формулу преобразования прописываешь в модуль кинематики,который используешь...
там две основных функции - прямая кинематика(kinematicsForward) , и обратная(kinematicsInverse)...
для "правильного" отображения в DRO нужно изменять прямую кинематику

Re: нетривиальная кинематика

Добавлено: 26 авг 2016, 19:49
aleha
Подскажи где мне это искать. Я честно говоря потерялся.

Re: нетривиальная кинематика

Добавлено: 26 авг 2016, 20:01
nkp
для начала выложи свой файл кинематики(он прописан в хал файле где то в самом начале)...
loadrt trivkins - это "обычная" кнематика для 3-х осей
что у тебя за строка там прописана?
-----------
и второе - нужна зависимость между вращением и линейным перемещением (реальные размеры плечей)

Re: нетривиальная кинематика

Добавлено: 26 авг 2016, 20:37
aleha
loadrt trivkins такая строка есть - а куда она обращается где эти описания кинематики лежат не знаю
Реальные размеры плечей есть. Но получается используется только радиус по которому на редукторе двигается шатун.
Общее перемещение равно 2R на 180 градусов поворота редуктора.
Скорость перемещения кстати тоже по этому же закону будет меняться.

Re: нетривиальная кинематика

Добавлено: 26 авг 2016, 20:49
nkp
aleha писал(а):loadrt trivkins такая строка есть -
путь к файлу кинематики(да и вообще к любому файлу в линукс) можно
найти командой в терминале:

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

lacate trivkins.c
вот все (почти)) файлы кинематик,
в том числе trivkins.c:

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

/********************************************************************
* Description: trivkins.c
*   Trivial kinematics for 3 axis Cartesian machine
*
*   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 "kinematics.h"		/* these decls */


int kinematicsForward(const double *joints,
		      EmcPose * pos,
		      const KINEMATICS_FORWARD_FLAGS * fflags,
		      KINEMATICS_INVERSE_FLAGS * iflags)
{
    pos->tran.x = joints[0];
    pos->tran.y = joints[1];
    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)
{
    joints[0] = pos->tran.x;
    joints[1] = pos->tran.y;
    joints[2] = pos->tran.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_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("trivkins");
    if(comp_id > 0) {
	hal_ready(comp_id);
	return 0;
    }
    return comp_id;
}

void rtapi_app_exit(void) { hal_exit(comp_id); }
==================================================
какую из осей нужно редактировать?

Re: нетривиальная кинематика

Добавлено: 26 авг 2016, 20:59
MX_Master
Пример, от Nick'a - http://www.cnc-club.ru/forum/viewtopic. ... 673#p78673
Как установить, от nkp - http://www.cnc-club.ru/forum/viewtopic. ... 673#p78684
Копирайты соблюдены :hehehe:

Re: нетривиальная кинематика

Добавлено: 26 авг 2016, 21:25
aleha
nkp писал(а): какую из осей нужно редактировать?
У меня все оси одного типа. А когда я этот файл с кинематикой поменяю его надо компилировать.

это оно?
sudo comp --install trivkinsnew.c
в hal строку loadrt trivkins заменить на loadrt trivkinsnew
trivkinsnew - это имя нашей новой кинематики (ну или любое другое)))

Re: нетривиальная кинематика

Добавлено: 26 авг 2016, 21:29
nkp
aleha писал(а):это оно?sudo comp --install trivkinsnew.c
только в свежих версиях емс вместо comp - halcompile
sudo halcompile --install trivkinsnew.c

Re: нетривиальная кинематика

Добавлено: 26 авг 2016, 21:38
nkp
если я правильно понял,твоя зависимость выражается так:

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

double R=длина_плеча;
pos->tran.x = ((2*R)/180)*joints[0];
R можно указать непосредственно,
а можно в виде пина ,значение которого можно будет менять в hal без
перекомпиляции кинематики...
пример назначения пинов:

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

int rtapi_app_main(void) {
    int res=0;
    
    comp_id = hal_init("riderkins");
    if (comp_id < 0) return comp_id;
    
    haldata = hal_malloc(sizeof(*haldata));
    if (!haldata) goto error;
    if((res = hal_pin_float_new("riderkins.top", HAL_IO, &(haldata->d1), comp_id)) < 0) goto error;
    if((res = hal_pin_float_new("riderkins.middle", HAL_IO, &(haldata->d2), comp_id)) < 0) goto error;
    if((res = hal_pin_float_new("riderkins.bottom", HAL_IO, &(haldata->d3), comp_id)) < 0) goto error;


    hal_ready(comp_id);
    return 0;
    
error:
    hal_exit(comp_id);
    return res;
}

Re: нетривиальная кинематика

Добавлено: 26 авг 2016, 21:48
aleha
Я честно говоря второй вариант не понял.
nkp писал(а):
aleha писал(а):это оно?sudo comp --install trivkinsnew.c
только в свежих версиях емс вместо comp - halcompile
sudo halcompile --install trivkinsnew.c
Вот спасибо завтра попробую поиграть и зависимость покажу но не
nkp писал(а):double R=длина_плеча;
pos->tran.x = ((2*R)/180)*joints[0];
- отпишусь.

Визуализация перемещения в матлабе выполняется и в ЛСНС посылаются длины актуаторов - кстати тоже задача нетривиальная это между собой связать.

Re: нетривиальная кинематика

Добавлено: 26 авг 2016, 21:59
nkp
aleha писал(а):Я честно говоря второй вариант не понял.
для компиляции в "старых" версияз емс был модуль comp,
поэтому команда компиляции выглядела:
sudo comp --install trivkinsnew.c
--------------
сейчас новый модуль в сборках , halcompile,поэтому команда выглядит так:
sudo halcompile --install trivkinsnew.c
========================
изуализация перемещения в матлабе выполняется и в ЛСНС посылаются длины актуаторов - кстати тоже задача нетривиальная это между собой связать.
подозреваю,что тебе можно взять готовую кинематику,ведь почти все уже написано до нас :)

Re: нетривиальная кинематика

Добавлено: 26 авг 2016, 22:01
nkp
aleha писал(а):и зависимость покажу но не
это же то , что ты мне дал))
(2R на 180 градусов)

Re: нетривиальная кинематика

Добавлено: 26 авг 2016, 22:09
aleha
nkp писал(а):
aleha писал(а):и зависимость покажу но не
это же то , что ты мне дал))
(2R на 180 градусов)
Извини спорить не буду.
Мой математик на доске какие-то формулы написал я завтра до них доберусь и в них въеду - просто дело под вечер было я не успел заморочится.

Re: нетривиальная кинематика

Добавлено: 28 авг 2016, 18:50
aleha
У меня trivkins только с расширением КО это видимо уже скомпилированный файл.
Менять кинематику надо с исходников. А скомпилированный файл куда надо попадет или надо указывать.

Re: нетривиальная кинематика

Добавлено: 28 авг 2016, 18:57
nkp
aleha писал(а):скомпилированный файл куда надо попадет или надо указывать.
да - попадает куда надо