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

Что я еще не знал о LinuxCNC, что нам еще предстоит сделать

Добавлено: 16 сен 2013, 23:08
Nick
PKM писал(а):LinuxCNC как воздух нужен lookahead.
Блин, почему вы мне раньше об этом не говорили :pssdoff:?!? Какие там features!!!

В общем, давайте успокоимся и определим первостепенные задачи, которые нам предстоит планомерно решить.

Задачи

1. Определиться с Lookahead.
2. S-кривые разгонаторможения.
3. ...
25. LinuxCNC Features

ЗЫ эта тема будет прилеплена, чтобы вы не забывали о ней :twisted:! Пора сделать что-то полезное для LinuxCNC, пора возвращать долги.

Re: Что я еще не знал о LinuxCNC, что нам еще предстоит сдел

Добавлено: 16 сен 2013, 23:10
PKM
Забыл еще один пункт:

... PROFIT!!!

Re: Что я еще не знал о LinuxCNC, что нам еще предстоит сдел

Добавлено: 16 сен 2013, 23:11
nkp
ты видел "планы" на lcnc3 ??

Re: Что я еще не знал о LinuxCNC, что нам еще предстоит сдел

Добавлено: 16 сен 2013, 23:34
nkp
Nick писал(а):1. Определиться с Lookahead.
в емс lookahead =>readahead
(чтоб легче было искать)

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

nkp@nkp-desktop:~$ grep -rl 'readahead' /home/nkp/emc2-dev-80db2a2
/home/nkp/emc2-dev-80db2a2/docs/src/remap/structure.txt
/home/nkp/emc2-dev-80db2a2/include/emc.hh
/home/nkp/emc2-dev-80db2a2/bin/milltask
/home/nkp/emc2-dev-80db2a2/src/objects/emc/task/emctaskmain.o
/home/nkp/emc2-dev-80db2a2/src/emc/task/emctaskmain.cc
/home/nkp/emc2-dev-80db2a2/src/emc/rs274ngc/interp_python.cc
/home/nkp/emc2-dev-80db2a2/src/emc/rs274ngc/rs274ngc_pre.cc
/home/nkp/emc2-dev-80db2a2/src/emc/nml_intf/emc.hh
основа - /src/objects/emc/task/emctaskmain.cc

Re: Что я еще не знал о LinuxCNC, что нам еще предстоит сдел

Добавлено: 20 сен 2013, 12:07
michael-yurov
S кривые очень сложная задача, на мой взгляд.
Кажется мне, что численным дифференцированием ее по простому не решить, из за слишком грубого разбиения. А при более мелком разбиении будет чрезмерно высокая нагрузка на процессор.

Хотя, это просто сумбурные мысли спросонья.
Nick писал(а):Пора сделать что-то полезное для LinuxCNC, поравозвращать долги.
P.S. поравозвращать - не так пишется. Правильно - поразвращать!

Re: Что я еще не знал о LinuxCNC, что нам еще предстоит сдел

Добавлено: 20 сен 2013, 12:10
tooshka
michael-yurov писал(а): А при более мелком разбиении будет чрезмерно высокая нагрузка на процессор.
Мне кажется современные процессоры справятся с этой задачей. Можно еще проц на видеокарте подключить, только кто софт напишет?

Re: Что я еще не знал о LinuxCNC, что нам еще предстоит сдел

Добавлено: 20 сен 2013, 12:33
michael-yurov
tooshka писал(а):Мне кажется современные процессоры справятся с этой задачей. Можно еще проц на видеокарте подключить, только кто софт напишет?
Можно произвести геометрические расчеты ("векторные", что ли), они более сложные, но намного более производительные, и не имеют ограничений по точности.
Но в этом случае уже не получится обрабатывать всякие NURBs кривые, из за чрезмерной сложности.

Думаю, компромисным был бы вариант разбиения траектории на линейные сегменты, и дальнейший расчет, на основе геометрии.

Re: Что я еще не знал о LinuxCNC, что нам еще предстоит сдел

Добавлено: 20 сен 2013, 12:34
Nick
Проц считает траекторию и пихает ее в очередь для выполнения это делается не в риалтайме, из очереди берется траектория и в риалтайме выгоняется на исполнительные устройства. Если очередь кончится - то обработка просто приостановится до заполнения... т.е. это не так страшно :)

Re: Что я еще не знал о LinuxCNC, что нам еще предстоит сдел

Добавлено: 20 сен 2013, 12:45
tooshka
Как вариант считать траекторию на каком нибудь i7, а реалтайм останется на атоме. Как это в реальности сварганить ХЗ.
А вот интересно можно ли на современных многоядерниках заблокировать на одном из ядер изменение частоты, а на других работать?

Re: Что я еще не знал о LinuxCNC, что нам еще предстоит сдел

Добавлено: 20 сен 2013, 13:26
michael-yurov
tooshka писал(а):Как вариант считать траекторию на каком нибудь i7, а реалтайм останется на атоме. Как это в реальности сварганить ХЗ.
Все это уже слишком.
Лучше грамотно оптимизировать программу.

Теоретически - задача намного проще, чем то, что способен решать бюджетный процессор, просто нужно грамотно ее решить.

НО! я то то хотел сказать совсем не об этом, а о том, что LookAhead намного важнее, чем S кривые ускорения.
И сделать многострочный LookAhead намного проще.

Re: Что я еще не знал о LinuxCNC, что нам еще предстоит сдел

Добавлено: 20 сен 2013, 13:31
Nick
А где можно посмотреть исходники kmotion, надо посмотреть, как у них там все устроенно :)

Re: Что я еще не знал о LinuxCNC, что нам еще предстоит сдел

Добавлено: 20 сен 2013, 14:16
aaleksander
А где можно почитать про S-кривые и LookAHead?
А то как программист, помочь хочу, но в предметной области еще не очень разбираюсь.

Re: Что я еще не знал о LinuxCNC, что нам еще предстоит сдел

Добавлено: 20 сен 2013, 14:37
michael-yurov
Nick писал(а):А где можно посмотреть исходники kmotion, надо посмотреть, как у них там все устроенно :)
Полагаю, расчет траектории где-то в какой-то библиотеке описан.
Вот все, что есть: http://yadi.sk/d/X_UzYScY9bTpT
Я установил Microsoft Visual Studio, и открыл проект из папки KMotion431j\PC VC Examples\KMotionCNC

Где там что там дальше - для меня загадка.

Вообще сама программа запускается из папки KMotion431j\KMotion\Release

Re: Что я еще не знал о LinuxCNC, что нам еще предстоит сдел

Добавлено: 20 сен 2013, 14:55
michael-yurov
aaleksander писал(а):А где можно почитать про S-кривые и LookAHead?
А то как программист, помочь хочу, но в предметной области еще не очень разбираюсь.
Если вкратце и по простому, то:
Станок имеет массу и мгновенно ускоряться не может, он инертен, и моторы не всесильные, а это значит, что двигаться он может с ограниченным ускорением.
Для каждой оси - свое ограничение в зависимости от массы, подвижных частей и привода.
При все при этом, нельзя допустить ситуации, где одна ось успевает делать свою работу - а вторая отстает из за ограничения ускорения.
Т.е. расчет движения по траектории со ускорениями должен быть произведен заранее, с учетом ограничения всех осей.

Так вот, если все это дело сравнить с движением на автомобиле по криволинейной дороге, то Look Ahead - это дальность взгляда водителя.
Если водитель не представляет, что будет через 10 метров (густой туман), то он не может смело двигаться со скоростью 150 км/ч, т.к. в случае возникновения опасности или изменения траектории просто не успеет сбросить скорость.
Если же водитель наизусть помнит всю трассу (ну, или ближайшие несколько километров), то он сможет двигаться с максимальной допустимой скоростью на данной траектории так, что в кювет он не уедет и на ближайшем перекрестке сможет остановиться и повернуть.

Т.е. если буфер LookAhead маленький, то придется двигаться по траектории очень осторожно, а это потеря времени, и постоянные ускорения и замедления в начале и конце каждого маленького участка трассы.


На тему S кривых,
обычно станки двигаются с ограничением ускорений по осям так, что ускорение в каждый момент времени либо нулевое, либо максимальное, либо максимальное отрицательное.
Если сравнивать с автомобилями, то получается движение, как у троллейбуса - либо газ в пол, либо движение, либо торможение.

А вот движение с ускорением по S кривой - это плавное нажатие педали газа (не изменение скорости, а именно плавное изменение ускорения), и плавное нажатие и отпускание педали тормоза.

Хотя, можно двигаться, и как троллейбус, но все же нагрузка на механику будет меньше, если ускорение будет изменяться плавно.

Все бы хорошо, но если просто ограничить изменение ускорения получится рассогласование движения по осям.

Т.е. в итоге задача планировщика траектории состоит в том, чтобы так ограничить скорость движения на каждом участке траектории, чтобы скорость менялась плавно, а в случае с S-кривыми - еще и ускорение менялось плавно.

Re: Что я еще не знал о LinuxCNC, что нам еще предстоит сдел

Добавлено: 20 сен 2013, 15:11
aaleksander
Спасибо за развернутый ответ.
Получается, что задача планировщика траектории - в нужных местах расставить G08, G09, G96 с нужными значениями? Так чтоли? :thinking:
Или вы хотите тюнить LinuxCNC чтобы он это на лету делал?

P.S. чтобы не было рассогласования по осям, надо рулить вектором перемещения, а не каждой координатой отдельно.

Я пока в этой области чайник, но интересно.

Re: Что я еще не знал о LinuxCNC, что нам еще предстоит сдел

Добавлено: 20 сен 2013, 15:12
Nick
michael-yurov писал(а):...
Т.е. если буфер LookAhead маленький, то придется двигаться по траектории очень осторожно, а это потеря времени, и постоянные ускорения и замедления в начале и конце каждого маленького участка трассы.
Это то понятно, интересует взгляд на все это с точки зрения математики :).
Насколько я понимаю, в LinuxCNC при скруглении траектории по G61 (т.е. без скруглений) рассчитывается скорость исходя из торможения в точке угла, а при добавлении g64 делается тоже самое, только к расстоянию до угла прибавляется значение параметра P... Т.е. все получается достаточно просто :).
michael-yurov писал(а):Все бы хорошо, но если просто ограничить изменение ускорения получится рассогласование движения по осям.

Т.е. в итоге задача планировщика траектории состоит в том, чтобы так ограничить скорость движения на каждом участке траектории, чтобы скорость менялась плавно, а в случае с S-кривыми - еще и ускорение менялось плавно.
В принципе для неприрывного случая проблем нет. Проблема возникает при перемещении с кусочно непрерывным (даже кусочно постоянным) jerk. Вот тут начинают возникать всякие приколы связанные с тем, что тяжело рассчитать расстояние до остановки в случаях когда точки перелома попадают на середину интервала разбиения по времени.

Как таковую кривую вписать в график движения не так уж и сложно...

Re: Что я еще не знал о LinuxCNC, что нам еще предстоит сдел

Добавлено: 20 сен 2013, 15:16
michael-yurov
А что такое G08, G09, G96?
aaleksander писал(а):Или вы хотите тюнить LinuxCNC чтобы он это на лету делал?
Нам нужно, имея на руках G-код в текстовом виде, получить в итоге массив точек в пространстве чтобы они лежали на траектории через фиксированные промежутки времени, уже с учетом ограничения скоростей и ускорений для всех осей и для ограничения скорости подачи.

Re: Что я еще не знал о LinuxCNC, что нам еще предстоит сдел

Добавлено: 20 сен 2013, 15:21
michael-yurov
Nick писал(а):Это то понятно, интересует взгляд на все это с точки зрения математики .
Так это я так, для aaleksander объяснял задачу.
Nick писал(а):Насколько я понимаю, в LinuxCNC при скруглении траектории по G61 (т.е. без скруглений) рассчитывается скорость исходя из торможения в точке угла, а при добавлении g64 делается тоже самое, только к расстоянию до угла прибавляется значение параметра P... Т.е. все получается достаточно просто
Насколько я понимаю - там при активации G64, мы знаем, какой радиус скругления будет между следующими сегментами и можем двигаться с такой скоростью, чтобы к точке начала скругления успеть сбросить скорость до величины допустимой при движении по этому радиусу скругления (можно грубо посчитать на основе центростремительного ускорения).

Re: Что я еще не знал о LinuxCNC, что нам еще предстоит сдел

Добавлено: 20 сен 2013, 15:25
Сергей Саныч
aaleksander писал(а):Или вы хотите тюнить LinuxCNC чтобы он это на лету делал?
Да. Поскольку система с открытым кодом, ничто не препятствует (теоретически) любым ее усовершенствованиям.

Re: Что я еще не знал о LinuxCNC, что нам еще предстоит сдел

Добавлено: 20 сен 2013, 15:27
michael-yurov
Nick писал(а):В принципе для неприрывного случая проблем нет.
Если речь о непрерывно дифференцируемой функции, то как бы у нас вся траектория такая, кроме точек, где необходимо остановитсья для смены направления.
Nick писал(а):Проблема возникает при перемещении с кусочно непрерывным (даже кусочно постоянным) jerk.
Вот это не понимаю. У нас же Jerk ограничен фиксирвоанным значением, он либо максимальный, либо, минимальный, либо нулевой.
Nick писал(а):Вот тут начинают возникать всякие приколы связанные с тем, что тяжело рассчитать расстояние до остановки в случаях когда точки перелома попадают на середину интервала разбиения по времени.
Да и наплевать. Все равно при дроблении по 1 мс не получится достаточно плавно менять ускорение.
Nick писал(а):Как таковую кривую вписать в график движения не так уж и сложно...
А я над этим несколько суток думал.