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

Работа с платами MESA, подключение, конфигурация.
aleha
Мастер
Сообщения: 265
Зарегистрирован: 30 ноя 2013, 19:16
Репутация: 136
Настоящее имя: Алексей
Откуда: Алматы
Контактная информация:

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

Сообщение aleha »

Прошу совет в какую сторону копать.
Есть гексапод с приводом на моторах редукторах (на картинке привод внизу круглый) на нем же стоит энкодер который индицирует угловое положение выходного вала. Все это управляется 5I25+7I77 и LNC. С этой связкой проблем нет.
Выход редуктора, он вращается только пол оборота, через кривошип соединен с узлом линейного перемещения (прямоугольник сверху перемещается вверх вниз)
В LCNC даешь команду на перемещение оси на 100 дискрет он крутит редуктором проворачивает на 100 угловых дискрет.
Но верхнее звено линейно перемещает по синусоидальному закону. Как можно преобразовать сигнал энкодера чтоб в аксис он высвечивался после обработки специальной формулой.
Вложения
кривулька.JPG
кривулька.JPG (8.51 КБ) 7131 просмотр
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

"свою" формулу преобразования прописываешь в модуль кинематики,который используешь...
там две основных функции - прямая кинематика(kinematicsForward) , и обратная(kinematicsInverse)...
для "правильного" отображения в DRO нужно изменять прямую кинематику
aleha
Мастер
Сообщения: 265
Зарегистрирован: 30 ноя 2013, 19:16
Репутация: 136
Настоящее имя: Алексей
Откуда: Алматы
Контактная информация:

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

Сообщение aleha »

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

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

Сообщение nkp »

для начала выложи свой файл кинематики(он прописан в хал файле где то в самом начале)...
loadrt trivkins - это "обычная" кнематика для 3-х осей
что у тебя за строка там прописана?
-----------
и второе - нужна зависимость между вращением и линейным перемещением (реальные размеры плечей)
aleha
Мастер
Сообщения: 265
Зарегистрирован: 30 ноя 2013, 19:16
Репутация: 136
Настоящее имя: Алексей
Откуда: Алматы
Контактная информация:

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

Сообщение aleha »

loadrt trivkins такая строка есть - а куда она обращается где эти описания кинематики лежат не знаю
Реальные размеры плечей есть. Но получается используется только радиус по которому на редукторе двигается шатун.
Общее перемещение равно 2R на 180 градусов поворота редуктора.
Скорость перемещения кстати тоже по этому же закону будет меняться.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение 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); }
==================================================
какую из осей нужно редактировать?
Аватара пользователя
MX_Master
Мастер
Сообщения: 7465
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3088
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

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

Сообщение MX_Master »

Пример, от Nick'a - http://www.cnc-club.ru/forum/viewtopic. ... 673#p78673
Как установить, от nkp - http://www.cnc-club.ru/forum/viewtopic. ... 673#p78684
Копирайты соблюдены :hehehe:
aleha
Мастер
Сообщения: 265
Зарегистрирован: 30 ноя 2013, 19:16
Репутация: 136
Настоящее имя: Алексей
Откуда: Алматы
Контактная информация:

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

Сообщение aleha »

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

это оно?
sudo comp --install trivkinsnew.c
в hal строку loadrt trivkins заменить на loadrt trivkinsnew
trivkinsnew - это имя нашей новой кинематики (ну или любое другое)))
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

aleha писал(а):это оно?sudo comp --install trivkinsnew.c
только в свежих версиях емс вместо comp - halcompile
sudo halcompile --install trivkinsnew.c
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение 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;
}
aleha
Мастер
Сообщения: 265
Зарегистрирован: 30 ноя 2013, 19:16
Репутация: 136
Настоящее имя: Алексей
Откуда: Алматы
Контактная информация:

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

Сообщение 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];
- отпишусь.

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

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

Сообщение nkp »

aleha писал(а):Я честно говоря второй вариант не понял.
для компиляции в "старых" версияз емс был модуль comp,
поэтому команда компиляции выглядела:
sudo comp --install trivkinsnew.c
--------------
сейчас новый модуль в сборках , halcompile,поэтому команда выглядит так:
sudo halcompile --install trivkinsnew.c
========================
изуализация перемещения в матлабе выполняется и в ЛСНС посылаются длины актуаторов - кстати тоже задача нетривиальная это между собой связать.
подозреваю,что тебе можно взять готовую кинематику,ведь почти все уже написано до нас :)
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

aleha писал(а):и зависимость покажу но не
это же то , что ты мне дал))
(2R на 180 градусов)
aleha
Мастер
Сообщения: 265
Зарегистрирован: 30 ноя 2013, 19:16
Репутация: 136
Настоящее имя: Алексей
Откуда: Алматы
Контактная информация:

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

Сообщение aleha »

nkp писал(а):
aleha писал(а):и зависимость покажу но не
это же то , что ты мне дал))
(2R на 180 градусов)
Извини спорить не буду.
Мой математик на доске какие-то формулы написал я завтра до них доберусь и в них въеду - просто дело под вечер было я не успел заморочится.
aleha
Мастер
Сообщения: 265
Зарегистрирован: 30 ноя 2013, 19:16
Репутация: 136
Настоящее имя: Алексей
Откуда: Алматы
Контактная информация:

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

Сообщение aleha »

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

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

Сообщение nkp »

aleha писал(а):скомпилированный файл куда надо попадет или надо указывать.
да - попадает куда надо
Ответить

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