Перейти к публикации

G-POST, много вопросов. Хочется понять логику работы.


DJ Astro

Рекомендованные сообщения

Bastion, немного непонятен вопрос - где выводится угол А? В последующих кадрах перемещений или после обработки КАМЕРЫ в цикле PLANE SPATIAL ? Вопрос в том, зачем выводится А0, если поворот только по B-90, так?

 

DJ Astro, после обработки КАМЕРЫ. Обрабатываю деталь с циклом PLANE SPATIAL (в Sinumerik - CYCLE800). Наклоняю деталь на -90 по оси B и потом по оси А на 23 градуса - выводит в цикле только B-90, А0, наклоняю по В на -90, по А на 45, выводит только В-90 и так далее. 

Может какой-то предельный случай с 90 градусами? Потому что ради эксперимента поставил -89,9 градуса - вывел и А23 и В-89,9. Вопрос - как усовершенствовать алгоритм, чтобы обойти это ограничение? 

 

Да, все верно - cos90 равен нулю и поэтому atan2f(YK,ZK) не считается и значение обнуляется ((( Есть идеи как это победить? 

 

П.С. Всех с Днем Победы!!! 

Ссылка на сообщение
Поделиться на других сайтах


Bastion, еще раз перепроверил, сделал обработку на кубике на всех гранях - все углы выводит, всё правильно рассчитывает.

Пробовал 2 варианта:

1. СК всей операции в центре верхней грани (плоскости XY, YZ, ZX системы координат параллельны ребрам кубика), локальные СК на вертикальных ребрах ниже верхней грани. В этом случае все повороты кратны 90.

2. СК всей операции в центре верхней грани (СК дополнительно повернута относительно Z на некоторый угол), локальные СК на вертикальных ребрах ниже верхней грани. В этом случае в выводимых углах появляется этот небольшой угол.


вот модель, правда в Creo 3.0. Не знаю, сможете открыть или нет.

camera.ZIP

Изменено пользователем DJ Astro
Ссылка на сообщение
Поделиться на других сайтах

Можете посмотреть мою обработку (тоже в Крео 3)? part1.rar А вашей модели почему-то не видно, может вы её не загрузили? 

 

Ссылка на сообщение
Поделиться на других сайтах

Да, в моём варианте обработки для проверки правильности работы кода таких вариантов не встретилось (когда B=+-90). А проверка правильности расчетов в экселе оказалась не совсем правильной. Для проверки я задавал углы, по ним вычислял матрицу поворота и затем обратно по матрице вычислял углы. Раз значения совпадали значит всё ОК!  Только теперь, когда начал разбираться понял, что при вычислении матрицы, там где должны были быть нули получались очень маленькие числа типа 0,11Е-17, (но не ноль!). И поэтому при обратных вычислениях исходные углы вычислялись правильно, а не обнулялись. А я сразу не придал значения этому... :(

 

Bastion, добавил в код для CAMERA такие условия для проверки предельных случаев:

теперь ваша обработка работает правильно

....

.....

AVAL=ATAN2F(YK,ZK) $$ plane spatial A
BVAL=ASINF(-XK) $$ plane spatial B
CVAL=ATAN2F(XJ,XI) $$ plane spatial C
IF (XK.EQ.-1) THEN $$ if B=90
 CVAL=ASINF(YI)
ELSE
  IF (XK.EQ.1) THEN $$ if B=-90
    CVAL=ASINF(-YI)
  ENDIF

ENDIF 

AVAL=TEXT/CONVF,AVAL,10,5,1,0,5 $$ convert to text
BVAL=TEXT/CONVF,BVAL,10,5,1,0,5
CVAL=TEXT/CONVF,CVAL,10,5,1,0,5

.....

...

В этих случаях А будет всегда =0, а С будет вычисляться правильно.

Или, если хотите, то можно поменять наоборот - А -вычисляется, С=0. Результат работы цикла PLANE SPATIAL будет одинаковый.

 

Ссылка на сообщение
Поделиться на других сайтах

Спасибо.

Я сам тоже начал разбираться с матрицами поворотов и вот что вычитал здесь http://www.gamedev.ru/code/articles/faq_matrix_quat?page=4

"Что такое фиксация оси?

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

  Из-за чего станет невозможно повернуть объект в нужной оси.

  К примеру, если вращать объект в порядке Z,Y,X и повернуть 
  по оси Y на 90 градусов. 
  
  В этом случае, вращение по оси Z будет произведено первым, 
  а значит, будет проведено, верно. По оси Y также корректно. 
  Однако после вращения по Y, ось X будет вращаться по оси Z. 

  Так что любое вращение по X на самом деле будет вращать по Z."

Также можно посмотреть здесь - http://habrahabr.ru/post/183116/

Где-то читал (не могу найти где), что эта проблема решается сменой последовательности поворотов и, следовательно, сменой порядка перемножения матриц. В связи с этим вопрос: почему у вас именно такая последовательность - сначала вокруг Z, потом вокруг Y, и потом вокруг Х?  

Ссылка на сообщение
Поделиться на других сайтах

Где-то читал (не могу найти где), что эта проблема решается сменой последовательности поворотов и, следовательно, сменой порядка перемножения матриц. В связи с этим вопрос: почему у вас именно такая последовательность - сначала вокруг Z, потом вокруг Y, и потом вокруг Х?  

Именно в такой последовательности ProE рассчитывает матрицу для команды CAMERA. 

 

Про кватернионы читал ещё в самом начале, как только занялся этими матрицами. Но так и не понял, как и куда их тут применить. 

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

Ссылка на сообщение
Поделиться на других сайтах

Эх, нет у меня знакомых специалистов по теоретической механике (это же термех, правильно?). Хорошо бы было получить их консультацию по данному вопросу. 

Ссылка на сообщение
Поделиться на других сайтах

Эх, нет у меня знакомых специалистов по теоретической механике (это же термех, правильно?). Хорошо бы было получить их консультацию по данному вопросу. 

Мне по термеху в универе было 3 балла :blush:  :biggrin: 

Есть предположение, что по исходным трём матрицам поворота вокруг каждой из осей нужно вычислить кватернионы, потом эти кватернионы перемножить, получить результирующий кватернион, в котором будут фигурировать наши три искомых угла. По матрице камеры так же вычислить кватернион. И из равенства этих кватернионов каким-то образом находить углы...

Ссылка на сообщение
Поделиться на других сайтах

Bastion, будем развивать тему кватернионов? Или вариант с рассмотрением предельных углов решает задачу полностью? А то я тут уже закопался в формулах перевода матриц в кватернионы и обратно :biggrin:

Ссылка на сообщение
Поделиться на других сайтах
DJ Astro, т.е. мы должны сначала перевести матрицу в кватернион, а затем из кватерниона вычислить углы Эйлера, так? Или не углы Эйлера, а  сферические углы (для начала бы понять какая между ними разница)? 

Попробовать можно, хуже от этого не будет, но результат не гарантирован (т.е. может ничего не получиться :smile: ).

Ссылка на сообщение
Поделиться на других сайтах

Компоненты матрицы поворота, выраженные через кватернион:

fcbc131b2d84e50262f2709afbc155fa.png

Преобразование в углы Эйлера:

a2925987257bc7469187cfc3c18da853.png

Конечный код:

heading = atan2(2*qy*qw-2*qx*qz , 1 - 2*qy2 - 2*qz2)
attitude = asin(2*qx*qy + 2*qz*qw) 
bank = atan2(2*qx*qw-2*qy*qz , 1 - 2*qx2 - 2*qz2)

except when qx*qy + qz*qw = 0.5 (north pole)
which gives:
heading = 2 * atan2(x,w)
bank = 0
and when qx*qy + qz*qw = -0.5 (south pole)
which gives:
heading = -2 * atan2(x,w)
bank = 0

Теперь остается все это перевести в FIL и увидеть, что по сути вы и раньше все в кватернионах делали, только без лишнего преобразования, так? Или я что-то не понял? 

Ссылка на сообщение
Поделиться на других сайтах

Да не, это с википедии английской ))) А так - на бумажке пишу, ибо маткадом не владею  :sad:

Ссылка на сообщение
Поделиться на других сайтах

Слегка собрал мысли в кучу  :doh: ..

 



DJ Astro, т.е. мы должны сначала перевести матрицу в кватернион, а затем из кватерниона вычислить углы Эйлера, так? Или не углы Эйлера, а  сферические углы (для начала бы понять какая между ними разница)? 

Попробовать можно, хуже от этого не будет, но результат не гарантирован (т.е. может ничего не получиться :smile: ).

 

Мы ищем пространственные углы, т.е. последовательные повороты относительно всех осей СК: сначала повернули относительно оси Z, потом повернули относительно нового положения оси Y, потом повернули относительно нового положения оси X.

В углах Эйлера поворот 2 раза через Z - сначала повернули относительно оси Z, потом повернули относительно нового положения оси X, потом повернули относительно нового положения Z.

 

Я в маткаде тоже не умею, на бумажке пробовал - неудобно, пилил в ворде  :biggrin:

Расписал оба варианта.

1. Формулы матрицы поворота, в которой есть нужные углы, перевел в кватернион. 

2. Формулы каждой матрицы поворота вокруг каждой оси перевел в кватернионы, их перемножил, получил конечный кватернион.

 

Оба варианта вычисляют одинаково (ну оно как-бы и логично :rolleyes:). 

Как теперь из этих выражений найти углы? :doh:  :doh: Знатоки маткада, help!!!

 

 

 

 

 

Теперь остается все это перевести в FIL и увидеть, что по сути вы и раньше все в кватернионах делали, только без лишнего преобразования, так? Или я что-то не понял?

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

matrix.doc

Изменено пользователем DJ Astro
Ссылка на сообщение
Поделиться на других сайтах
Вобщем-то сейчас наш FIL работает именно так, как написано в этом коде. Только хочется знать - это полное решение, или есть еще какие-то случаи, когда решение не может быть найдено?

Собственно я и имел ввиду, что код получается одинаковый, хотя к нему можно прийти как через рассмотрение матрицы поворота, так и через кватернион. 


Самому хочется знать, но похоже решение полное... 

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

не факт...

обработка всякая бывает

я сталкивался что ПроЕ при выводе начинал путать октанты, и пост приходилось корректировать

Ссылка на сообщение
Поделиться на других сайтах

Такой вопрос. Можно ли как-то сделать, чтобы в программе, при коррекции, в шаге подхода вставлялась функция G44 (вместо g41/g42), а в начале следующего кадра G41/G42.

%
T18
M06
S1000 M03
G00 X-9 Y8.5
Z-19.2
G01 G44 Y-.5 F100
G41 X2.231
G03 X3.76 Y-.382 R10
G01 X5.471 Y-.118
G02 X7 Y0 R10
G01 X8.3
G02 X10.3 Y-2 R2
G01 Y-4
G02 X8.3 Y-6 R2
G01 X7
G02 X5.471 Y-5.882 R10
G01 X3.76 Y-5.618
G03 X2.231 Y-5.5 R10
G01 X0
Y8.5
G40 X-9
G00 Z10
M30
N9999 %
Изменено пользователем moovi
Ссылка на сообщение
Поделиться на других сайтах

moovi, можно попробовать таким способом:

(предварительно в настройках поста Machine Codes - Cutter Compensation назначить коррекциям слева-справа одинаковый код G44)

 

ARG=0

LOOP=1

 

CIMFIL/ON,CUTCOM
ARG=POSTF(7,4)
IF (ARG.NE.ICODEF(OFF)) THEN
LOOP=1
ELSE
LOOP=3
ENDIF
DMY=POSTF(13)
CIMFIL/OFF

CIMFIL/ON,GOTO
DMY=POSTF(20)
IF (LOOP.EQ.2) THEN
IF (ARG.EQ.ICODEF(LEFT)) THEN
PREFUN/41,NEXT
DMY=POSTF(21)
DMY=POSTF(13)
ENDIF
IF (ARG.EQ.ICODEF(RIGHT)) THEN
PREFUN/42,NEXT
DMY=POSTF(21)
DMY=POSTF(13)
ENDIF
ELSE
DMY=POSTF(13)
ENDIF
LOOP=LOOP+1
CIMFIL/OFF

Ссылка на сообщение
Поделиться на других сайтах
  • 2 недели спустя...

Или чуть попроще: оставляете G41/G42 как и было на левом и правом корректорах, а в FIL пишете:

FLG44=0

CIMFIL/AT,CUTCOM,LEFT

 FLG44=1

CIMFIL/OFF

 

CIMFIL/AT,CUTCOM,RIGHT

 FLG44=2

CIMFIL/OFF

 

CIMFIL/ON,GOTO

 DMY=POSTF(20)

 IF (FLG44.NE.0) PREFUN/44,NEXT

 DMY=POSTF(21)

 DMY=POSTF(13)

 IF (FLG44.EQ.1) CUTCOM/LEFT

 IF (FLG44.EQ.2) CUTCOM/RIGHT

 FLG44=0

CIMFIL/OFF

 

 

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




  • Сообщения

    • Богоманшин Игорь
      Эта пластина не совсем походит для вашего чугуна, производитель пишет "для стали и нержавейки", чугун как опция, рекомендует для К25, а у вас К10 (перлитный). Посмотрите в том же магазине пластины, у которых диапазон применения К05-К30. Но не факт, что пойдут без задиров.  Придется нескольких производителей пробовать.
    • Zergus
      Выкладывайте сюда свои "чудеса", может по модели получится понять, что в ней не так. А если есть возможность писать в техподдержку - кидайте им свой файл, думаю разберутся.
    • Богоманшин Игорь
      А есть подтверждение в каких либо нормативных документах? Или только из соображений "максимально минимальная себестоимость"?
    • ANT0N1DZE
      Это не поможет ответить на этот вопрос конкретными числами. Судя по всему, там металлические частички внутри материала. Подобные эластомеры существуют и применяются. 
    • gudstartup
      как перевести шпиндель снова первоначальный режим управления скоростью когда ему пофиг число импульсов на оборот? резьбу пока резать не будут а в подпрограмму смены можно что нить добавить или в реализацию m19  чтобы чпу из режима контроля позиционного кодера вышло?
    • gudstartup
    • mactepnew
      Вот я тоже так думал, пока не столкнулся с обратным) Как еще столкнусь, пришлю скриншот. Хаос еще в том, что порядок в дереве построения весьма условный. операция, которая стоит перед групой, имеет бОльший timestamp(пардон, не знаю как это в переводе), чем эта группа, и выполняется позже. При этом все операции в группе имеют timestamp на пару сотен меньше и выполняются раньше, чем две группы, стоящие перед ней. Логика?  Если в эскизе все элементы определены, то можно поставить еще один размер (хочешь переопределить эскиз - да пожалста!), изменить его - и NX самостоятельно выберет, какой размер или ограничение отпустить и весь эскиз летит к чертям. Это ли не хаос?   Назовете хоть один CAD, которым можно пользоваться так? Любой из встреченных мной имеет много неочевидных нюансов, которые конечно не проявляются при выполнении университетского или базового курса. В Creo я на протяжении 5 лет находил всё новые фишки, которые не прописаны в документации. Огромная благодарность Ruslan за пояснения тонкостей. Даже Компас и Solidworks, которые считаются самыми дружественными, оказалось непросто обуздать, когда проходил собеседования и делал тестовые. А ведь университетский курс знал на отлично!   Возвращаясь к NX - вот сегодняшний пример. Утром деталь была оранжевая, единая. Изменил пару уклонов и толщин, стала желтая с элементами оранжевого и частично твердотельной, частично листовой. Я даже не знаю, как сформулировать вопрос в поддержку. 
    • Mikhail_Podgornyj
      Добрый день, кто может поделиться SKF Bearing V1.6 (ANSYS App)? Заранее благодарен!
    • kkk
      Короче, как сделать автоматом не нашел. Раскрасил нужные грани нужными цветами. Затем на вкладке с цветом модели можно выбирать нужный цвет, тогда в модели выбираются грани, покрашенные этим цветом. Можно еще сохранить выбор этих граней, но смысла не вижу, т.к. все легко выбирается по цвету. Затем либо в инструменте Измерить смотрим площадь и как-то ее используем, либо можно макросом (что выкладывал Kir95 ) внести площадь в свойства (на вкладку Конфигурации). Можно еще внести выбранные грани в датчики, но как использовать их в свойствах не нашел.    Макрос прикрепляю.     Площадь выбранных граней в свойства.swp
    • IgnatvKudrin
      Для нашего производства требуются постоянно инструментальные пружины для штампов. Сейчас заказы обрабатываются довольно долго - до 2-х месяцев. А у нас сроки на штампы 1-2 месяца с испытанием, доработкой и т.п. Хотелось бы найти поставщика, у которого уже есть склад с данными пружинами или кто может доставить за 1 месяц.   Пружины стандартные по ISO, но на всякий случай приложил каталог. Вот список пружин, которые нужны очень срочно:   LR 32 x 44 - 1 шт. LR 25 x 51 - 2 шт. LB 63 x 89 - 7 шт. LB 32 x 102 - 10 шт. LB 32 x 89 - 20 шт. LB 32 x 76 - 12 шт. LB 32 x 51 - 6 шт. LB 25 x 127 - 9 шт.   Готов выслушать все предложения. Возможно даже есть те, кто сможет изготовить подобные пружины с такими же параметрами. 20231101.pdf
×
×
  • Создать...