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

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

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

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

Задачи

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

ЗЫ эта тема будет прилеплена, чтобы вы не забывали о ней :twisted:! Пора сделать что-то полезное для LinuxCNC, пора возвращать долги.
Аватара пользователя
PKM
Почётный участник
Почётный участник
Сообщения: 4263
Зарегистрирован: 31 мар 2011, 18:11
Репутация: 705
Настоящее имя: Андрей
Откуда: Украина
Контактная информация:

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

Сообщение PKM »

Забыл еще один пункт:

... PROFIT!!!
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение nkp »

ты видел "планы" на lcnc3 ??
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

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

Сообщение 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
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

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

Сообщение michael-yurov »

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

Хотя, это просто сумбурные мысли спросонья.
Nick писал(а):Пора сделать что-то полезное для LinuxCNC, поравозвращать долги.
P.S. поравозвращать - не так пишется. Правильно - поразвращать!
Аватара пользователя
tooshka
Почётный участник
Почётный участник
Сообщения: 1803
Зарегистрирован: 24 окт 2012, 14:26
Репутация: 209
Настоящее имя: Андрей
Откуда: Нижний Новгород
Контактная информация:

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

Сообщение tooshka »

michael-yurov писал(а): А при более мелком разбиении будет чрезмерно высокая нагрузка на процессор.
Мне кажется современные процессоры справятся с этой задачей. Можно еще проц на видеокарте подключить, только кто софт напишет?
Милая, ты услышь меня
под окном стою со своим я ЧПУ! (Протяжно; с надрывом; форте)
Внимание!!! Чрезмерное увлечение ЧПУ приводит к проблемам в семейных отношениях!
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

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

Сообщение michael-yurov »

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

Думаю, компромисным был бы вариант разбиения траектории на линейные сегменты, и дальнейший расчет, на основе геометрии.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

Проц считает траекторию и пихает ее в очередь для выполнения это делается не в риалтайме, из очереди берется траектория и в риалтайме выгоняется на исполнительные устройства. Если очередь кончится - то обработка просто приостановится до заполнения... т.е. это не так страшно :)
Аватара пользователя
tooshka
Почётный участник
Почётный участник
Сообщения: 1803
Зарегистрирован: 24 окт 2012, 14:26
Репутация: 209
Настоящее имя: Андрей
Откуда: Нижний Новгород
Контактная информация:

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

Сообщение tooshka »

Как вариант считать траекторию на каком нибудь i7, а реалтайм останется на атоме. Как это в реальности сварганить ХЗ.
А вот интересно можно ли на современных многоядерниках заблокировать на одном из ядер изменение частоты, а на других работать?
Милая, ты услышь меня
под окном стою со своим я ЧПУ! (Протяжно; с надрывом; форте)
Внимание!!! Чрезмерное увлечение ЧПУ приводит к проблемам в семейных отношениях!
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

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

Сообщение michael-yurov »

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

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

НО! я то то хотел сказать совсем не об этом, а о том, что LookAhead намного важнее, чем S кривые ускорения.
И сделать многострочный LookAhead намного проще.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

А где можно посмотреть исходники kmotion, надо посмотреть, как у них там все устроенно :)
aaleksander
Мастер
Сообщения: 577
Зарегистрирован: 23 авг 2013, 18:04
Репутация: 118
Откуда: г. Ухта
Контактная информация:

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

Сообщение aaleksander »

А где можно почитать про S-кривые и LookAHead?
А то как программист, помочь хочу, но в предметной области еще не очень разбираюсь.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

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

Сообщение michael-yurov »

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

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

Вообще сама программа запускается из папки KMotion431j\KMotion\Release
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

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

Сообщение michael-yurov »

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

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

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


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

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

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

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

Т.е. в итоге задача планировщика траектории состоит в том, чтобы так ограничить скорость движения на каждом участке траектории, чтобы скорость менялась плавно, а в случае с S-кривыми - еще и ускорение менялось плавно.
aaleksander
Мастер
Сообщения: 577
Зарегистрирован: 23 авг 2013, 18:04
Репутация: 118
Откуда: г. Ухта
Контактная информация:

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

Сообщение aaleksander »

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

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

Я пока в этой области чайник, но интересно.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

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

Сообщение Nick »

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

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

Как таковую кривую вписать в график движения не так уж и сложно...
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

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

Сообщение michael-yurov »

А что такое G08, G09, G96?
aaleksander писал(а):Или вы хотите тюнить LinuxCNC чтобы он это на лету делал?
Нам нужно, имея на руках G-код в текстовом виде, получить в итоге массив точек в пространстве чтобы они лежали на траектории через фиксированные промежутки времени, уже с учетом ограничения скоростей и ускорений для всех осей и для ограничения скорости подачи.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

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

Сообщение michael-yurov »

Nick писал(а):Это то понятно, интересует взгляд на все это с точки зрения математики .
Так это я так, для aaleksander объяснял задачу.
Nick писал(а):Насколько я понимаю, в LinuxCNC при скруглении траектории по G61 (т.е. без скруглений) рассчитывается скорость исходя из торможения в точке угла, а при добавлении g64 делается тоже самое, только к расстоянию до угла прибавляется значение параметра P... Т.е. все получается достаточно просто
Насколько я понимаю - там при активации G64, мы знаем, какой радиус скругления будет между следующими сегментами и можем двигаться с такой скоростью, чтобы к точке начала скругления успеть сбросить скорость до величины допустимой при движении по этому радиусу скругления (можно грубо посчитать на основе центростремительного ускорения).
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

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

Сообщение Сергей Саныч »

aaleksander писал(а):Или вы хотите тюнить LinuxCNC чтобы он это на лету делал?
Да. Поскольку система с открытым кодом, ничто не препятствует (теоретически) любым ее усовершенствованиям.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

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

Сообщение michael-yurov »

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

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