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

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

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




  • Сообщения

    • Denis_12
      Вот это помогло! Большое спасибо))) А я то все пытался через сборку это реализовать)  А Вы случайно не знаете как размеры в эскизе зафиксировать? Я имею ввиду при отдалении чертежа размеры стрелок и шрифтов увеличивается и происходит наслоение размеров друг на друга
    • ID_Hacker
      Для этого есть отдельная зона промышленной подсети. Если не лезть в настройки системной подсети ничего не завалится.   Сеть то грохнуть могли как на NCU так и на PCU50 и подходы к решению проблемы будут разные.
    • Artas28
      Добрый день! Есть какие ни будь рекомендации, на какую длину  нужно зажимать хвостовик в  термопатроне? Есть фреза д6, L50. Могу ли я зажать её за 15мм, или это будет мало? Или нужно зажимать  как минимум за  3 диаметра?
    • Ветерок
      Не понял что это за процедура такая "перенос в 2D".   Наверное, скрывать объекты на том или ином виде надо на соответствующем виде чертежа, а не в сборке. Или создать в сборке соответствующую конфигурацию и отображать на чертеже её.
    • Viktor2004
    • Denis_12
      Доброго времени суток! Ребят, ни как не могу решить проблему авто-обновления чертежного вида 3D сборки, к примеру скрываешь все кроме основания каркаса сборки, переносишь это в 2D (чертежный вид) указываешь размеры и т.п. (ставишь галочки "исключить из авто-обновления") после чего начинаешь в 3D сборке показывать дополнительно стойки (для создания нового вида), и вот в ранее созданном виде даже с отключенным авто-обновлением они тоже начинают проявляться. Как решить эту проблему? Нужно зафиксировать вид, чтобы он не обновлялся без моего участия. SolidWorks 2022 года.
    • Зинаида
      Возможно Вы смотрите не в той перспективе. Проверьте в перспективе "Мой Teamcenter" стоя на ревизии объекта. Возможно Вы смотрите не в той перспективе. Проверьте в перспективе "Мой Teamcenter" стоя на ревизии объекта.
    • alek77
      Да, спасибо, я уже из интереса ее нашел. Еще раз повторю, чтобы не выхватить, сам я такими методами указния размеров не пользуюсь, это самая вредная практика из всех, что встречал. В свое время имел много проблем в автокаде, корректируя чужие чертежи. Но там и отртогональные линии под углом в 0,001 градуса были в норме, и миллион линий одна поверх другой, и незамкнутые отрезки и много всего, от чего волосы дыбом. В солиде, думал, не столкнусь с таким, наивный. Поэтому искал и нашел макрос который косяки размеров подсвечивает. Он вполне рабочий, но не стабильный. В чем причина не разбирался, так как со своей задачей он справляется. Причем отрабатывает и галочки, и замену текста в размере. Хорошо, что @malvi.dp нашел время и что-то корректирует, спасибо отдельное ему за это. Макрос достаточно полезный при работе с чужими документами. И если удастся сохранить все начальные функции этого макроса против изощренных методов вредительства - будет офигенно.
    • Kelny
      Если этой ссылки достаточно для отображения материала и материал уже есть в обозначенной модели, то возможно подойдёт TabBuilder: https://help.solidworks.com/2023/russian/SolidWorks/SWHelp_List.html?id=e68c1877b4fa431483f8c751bd9fcc78&_gl=1*lby1j3*_up*MQ..*_ga*NTEyNjA5NDQ3LjE3MTQxMTU3MzA.*_ga_XQJPQWHZHH*MTcxNDExNTcyOS4xLjEuMTcxNDExNTczNy4wLjAuMA..#Pg0   В старых версиях при написанни ссылок такого радо в некоторых случаях можно было не писать имя файла, а достаточно было вместо имени файла модели оставить ПРОБЕЛ.SLDPRT и имя после этого подставлялось само. Пробовать надо.   Так же можете глянуть макрос по изменению свойств файла (методы и функции там устаревшие, но возможно даже будет работать и можно поковыряться в коде): https://kelnyproject.ucoz.ru/load/6-1-0-8 по програмированию так же есть справка (версию в ссылке поменяйте на свою, что бы справка была актуальна для вашей версии): https://help.solidworks.com/SearchEx.aspx?query=get custom property&version=2010&lang=english,enu&prod=api
    • gudstartup
      только перед обновлением обязательно выполните  все что написано в руководстве и касается сохранения состояния станка и чпу. и обязательно сделайте образ диска и помните что слишком новые версии могут не заработать на вашем чпу относительно безопасно ставить только сервиспаки
×
×
  • Создать...