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

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 пользователей

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




  • Сообщения

    • eljer0n
      Большое спасибо! Посмотрю. Но, судя по всему, даже если удастся заставить его сохранять чертеж с трехзначным исполнением, видимо, в той же спецификации правильного отображения не добиться. У Леона с товарищем был об этом разговор, что солид вроде как не воспринимает исполнения дальше двузначного. Хотя, может и я неправильно понял. Вернусь к этому вопросу чуть позже. Еще раз спасибо за совет.
    • mrVladimir
      @gudstartup @Viktor2004 спасибо Вам за такое участие.  Я вот тоже в maintenance manual заглянул (наконец-то ). А вот фраза "при замене FROM/SRAM необходимо ..." (под пунктом 3 во вложении) не подразумевает, что появление ps5523 произойдет только если мы решим на нашей чпу поменять именно FROM/SRAM. А при замене других печатных плат (в том числе и материнской ) необходимо только как написано в пункте 2 восстановить данные памяти SRAM и, при необходимости, файлы пользователя. Нет?
    • maxx2000
      @davidovka это же очевидно. Вдруг нужного размера не окажется  как в анекдоте  
    • davidovka
      А для чего и сотни исполнений в таблице и гибкость одновременно?
    • ak762
      в СВ есть встроенный калькулятор для расчета балок при различных сценариях нагружения если ваш профиль монорельса совпадает с предопределенными профилями то можно прикинуть поведение монорелься без анализа на картинке 2 расчета двутавровой балки в качестве теста    
    • Viktor2004
      @mrVladimir не спешите отчаиваться. Вопрос спорный Я завел новую тему в которой мы это выясним  
    • Viktor2004
      Уважаемые специалисты. У кого был опыт замены фануковских плат? Именно на ЧПУ. Пожалуйста напишите какое ЧПУ и какую плату меняли И результат. Подошла или не подошла  
    • gudstartup
      @mrVladimir к сожалению с вашей платой все не так просто вам придется приобрести ее клон то есть она должна быть подготовлена продавцом и в нее должен быть записан серийный номер вашей старой платы он на штрихкоде а так готовить умеют не все или готовьтесь к сертификации опций также есть еще один аппаратный вариант но не каждый будет на новую плату м\сх перепаивать с риском превратить ее в кирпич.   если бы у вас был отдельный модуль процессора то вы бы просто переставили его в новую плату и все а с этой платой из-за ее не модульности намучаешься
    • SAPRonOff
      в окне состава изделия снять замочки у колонки позиция, тогда генератор колонки состава изделия не будет им присваивать свои значения автоматически, а запомнит то - что вы поставили или стояло до изменений проекта: 
    • Kelny
      Смотреть надо процедуру main, почти в самом конце: Слева от этих строк на сером поле ставите красные точки (клик мышкой) и запускаете макрос, когда макрос дойдёт до обозначенных строк можно будет наводить мышку на перменные, например, sPathName и смотреть значения, что бы определить где сбой: Для продолжения выполнения макроса нажимаем зелёный треугольничек (как кнопка Play).      
×
×
  • Создать...