И все???Nick писал(а):Вроде все, даже как-то слишком просто
Пожалуй, с меня полагается магарыч(по всей вероятности-коньяк(адрес в личку, pls))
И все???Nick писал(а):Вроде все, даже как-то слишком просто
Код: Выделить всё
component atan2;
pin in float x;
pin in float y;
pin in float fb;
float pi = 3.14159265;
pin out float a;
function _;
license "GPL";
;;
#include <rtapi_math.h>
FUNCTION(_) {
if (x==0 and y==0) {a=0;} // hack to not get an error on 0,0
else {
float a1=atan2(x,y);
if (a1-fb)%(2*pi) > pi {a = fb-2*pi + a1;}
else {a = fb + a1;}
}
}
Ник, я тут подумал что на самом деле нет разницы- ролики могут поворачиваться на угол а или а+180 град(потому что они стоят попарно друг против друга). Это может упростить задачу?Nick писал(а):Ну практически все, есть один нюанс - atan выдает угол в диапазоне -pi;+pi, Т.е. если угол будет меняться с -179 до +179 градусов, станок будет поворачивать не по кратчайшему пути....
Код: Выделить всё
component atan2;
pin in float x;
pin in float y;
pin out float a;
float pi = 3.14159265;
function _;
license "GPL";
;;
#include <rtapi_math.h>
FUNCTION(_) {
if (x==0 and y==0) {a=0;} // hack to not get an error on 0,0
else {
float a1=atan2(x,y);
if (a1<0) a = pi+a1;
else a = a1;
}
}
Второй вариант-это последний?Nick писал(а):Хотя, лучше использовать второй вариант, и проблем не будет.
Я все думаю-как эксперементировать?Nick писал(а):только его надо протестировать.
Код: Выделить всё
loadrt atan2
net atan2x => atan2.0.x <= axis.0.joint-vel-cmd
net atan2y => atan2.0.y <= axis.1.joint-vel-cmd
net atan2a <= atan2.0.a => команда для поворота сервы
Код: Выделить всё
component atan2;
pin in float x;
pin in float y;
pin out float a;
float pi = 3.14159265;
function _;
license "GPL";
;;
#include <rtapi_math.h>
FUNCTION(_) {
if (x==0 and y==0) {a=0;} // hack to not get an error on 0,0
else {
float a1=atan2(x,y);
if (a1<0) a = pi+a1;
else a = a1;
}
}
наверно надо:dansystems1 писал(а):в файле под названием atan2
Код: Выделить всё
atan2.comp
Вот здесь можно про это почитать.dansystems1 писал(а):И еще вопрос-что такое comp.(папка?)
Если ничего не пишет - значит все хорошо. Если пишет какую-то ошибку, то давай ее текст сюдаdansystems1 писал(а):потом пишу в терминале sudo comp install atan2.comp и все на этом
знаю что есть ошибка, но не понимаю в чем
вот что "ответил" терминалNick писал(а):после этого sudo comp install и т.д.
Код: Выделить всё
component atan2;
pin in float x;
pin in float y;
pin out float a;
function _;
license "GPL";
;;
#include <rtapi_math.h>;
FUNCTION(_) {
float pi = 3.14159265;
if (x==0 && y==0) {a=0;} // hack to not get an error on 0,0
else {
float a1;
a1 = atan2(x,y);
if (a1<0)
{a = a1+pi;}
else
{a = a1;}
}
}