Re: delta robot emc2
Добавлено: 08 июн 2012, 17:31
Имеется в виду файл другой какой-то кинематики и сравнить его с моим файлом?Nick писал(а):Надо его сравнить с trikins... в смысле исходник, посмотреть чем они еще отличаются...
Статьи, обзоры, цены на станки и комплектующие.
https://cnc-club.ru/forum/
Имеется в виду файл другой какой-то кинематики и сравнить его с моим файлом?Nick писал(а):Надо его сравнить с trikins... в смысле исходник, посмотреть чем они еще отличаются...
Код: Выделить всё
/********************************************************************
* 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); }Если я просто ноль прописал это не могло повлиять или надо как тут?s3301 писал(а):Несколько надёжней будет вот так:Nick писал(а): В общем надо HAL_SUCCESS заменить на 0.
#ifndef HAL_SUCCESS
#define HAL_SUCCESS 0
#endif
Не, похоже модуль неправильно скомпилился.nkp писал(а):insmod: error inserting '/usr/realtime-2.6.32-122-rtai/modules/emc2/deltakins.ko': -1 Invalid module format
может быть ошибка в самом модуле
В данном случае эта запись и замена на 0 развнозначны, но при заменах можно что-нибудь пропустить, а эта запись, особенно если расположить её в правильном месте сама "поменяет" везде.z-vr писал(а): Если я просто ноль прописал это не могло повлиять или надо как тут?
не знаю что это значит,но:s3301 писал(а):Что говорят file /usr/realtime-2.6.32-122-rtai/modules/emc2/deltakins.ko и modinfo /usr/realtime-2.6.32-122-rtai/modules/emc2/deltakins.ko
Код: Выделить всё
root@nkp-desktop:/usr/src/linux-headers-2.6.32-122-rtai# file /usr/realtime-2.6.32-122-rtai/modules/emc2/deltakins.ko
/usr/realtime-2.6.32-122-rtai/modules/emc2/deltakins.ko: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not strippedКод: Выделить всё
root@nkp-desktop:/usr/src/linux-headers-2.6.32-122-rtai# modinfo /usr/realtime-2.6.32-122-rtai/modules/emc2/deltakins.ko
filename: /usr/realtime-2.6.32-122-rtai/modules/emc2/deltakins.ko
license: GPL
srcversion: 87EF434EF176B8BE61DAA0F
depends: hal_lib
vermagic: 2.6.32-122-rtai SMP mod_unload 586TSCКод: Выделить всё
loadrt deltakinsКод: Выделить всё
int rtapi_app_main(void) {
int res = 0;
comp_id = hal_init("deltakins");
if(comp_id < 0) return comp_id;
haldata = hal_malloc(sizeof(struct haldata));
if(!haldata) goto error;
if((res = hal_pin_float_new("deltakins.e", HAL_IO, &(haldata->e), comp_id)) != HAL_SUCCESS) goto error;
if((res = hal_pin_float_new("deltakins.f", HAL_IO, &(haldata->f), comp_id)) != HAL_SUCCESS) goto error;
if((res = hal_pin_float_new("deltakins.re", HAL_IO, &(haldata->re), comp_id)) != HAL_SUCCESS) goto error;
if((res = hal_pin_float_new("deltakins.rf", HAL_IO, &(haldata->rf), comp_id)) != HAL_SUCCESS) goto error;
delta_e = delta_f = delta_re = delta_rf = 1.0;
hal_ready(comp_id);
return 0;
error:
hal_exit(comp_id);
return res;
}
вроде ошибок при компилировании не было...s3301 писал(а):Не, похоже модуль неправильно скомпилился.Что говорят
В исходниках раскомментировалNick писал(а):Т.е. заработало??? А что ты сделал не так?
file - по содержимому определят тип файла, не расширение после имени, а текст это, картинка или ещё что.nkp писал(а):не знаю что это значит,но:
я пока не силён в этом API, но мне показалось, что параметры должны передаваться как-то с помощью пинов, в имени которых есть буквы типа "deltakins.e"nkp писал(а):В исходниках раскомментировал
Это метка, на которую происходит переход при выполнении "goto error".Nick писал(а):Меня вот это смущает , что за "error:" ?!? (4-я строчка снизу)
Это не для всех. Некоторые кинематики только во время компиляции параметры принимают.s3301 писал(а):я пока не силён в этом API, но мне показалось, что параметры должны передаваться как-то с помощью пинов, в имени которых есть буквы типа "deltakins.e"
Повторил все, у меня при компиляции такие предупреждения:nkp писал(а):#29 nkp » Вчера, 23:29
попробовал я проделать все эти действия:
Файл:
Код: Выделить всё
/tmp/tmp790I3i/deltakins.c:7: warning: data definition has no type or storage class
/tmp/tmp790I3i/deltakins.c:7: warning: type defaults to ‘int’ in declaration of ‘e’
/tmp/tmp790I3i/deltakins.c:8: warning: data definition has no type or storage class
/tmp/tmp790I3i/deltakins.c:8: warning: type defaults to ‘int’ in declaration of ‘f’
/tmp/tmp790I3i/deltakins.c:9: warning: data definition has no type or storage class
/tmp/tmp790I3i/deltakins.c:9: warning: type defaults to ‘int’ in declaration of ‘re’
/tmp/tmp790I3i/deltakins.c:10: warning: data definition has no type or storage class
/tmp/tmp790I3i/deltakins.c:10: warning: type defaults to ‘int’ in declaration of ‘rf’Код: Выделить всё
double e = 115.0;Нужно в объявлении переменных написать вот так:z-vr писал(а):type defaults to ‘int’ in declaration of ‘e’
Ошибка говорит, что не задан тип переменной по этому по дефолту он ставится в int, т.е. в целое число. А он должен быть действительным числом, т.к. потом с этими параметрами производятся различные хитрые вычисления.UAVpilot писал(а):double e = 115.0;
Пока добился этого:Nick писал(а):Нужно в объявлении переменных написать вот так:z-vr писал(а):type defaults to ‘int’ in declaration of ‘e’Ошибка говорит, что не задан тип переменной по этому по дефолту он ставится в int, т.е. в целое число. А он должен быть действительным числом, т.к. потом с этими параметрами производятся различные хитрые вычисления.UAVpilot писал(а):double e = 115.0;
Это старый стандарт, который говорит, что все объявления переменных должны быть только в начале блоков {...}, но имхо это пережиток...z-vr писал(а):/tmp/tmpoiqJBq/deltakins.c:124: warning: ISO C90 forbids mixed declarations and code