Не найдено связующего пути между ссылочными рамками - PullRequest
1 голос
/ 06 марта 2019

Я использую модуль sympy в блокноте jupyter, чтобы выполнить некоторые расчеты с опорными кадрами.Я вращаюсь вокруг оси z только на угол av.Идея заключается в следующем:

  • W - это рамка мира
  • V - это рама автомобиля, рама мира повернута по оси z с помощью pi - av
  • u - это рамка v, повернутая на угол 90 градусов по оси z

Я использую следующий код:

from sympy import *
init_printing()
av = symbols('\\alpha_v')

# Reference frames
from sympy.physics.vector import *
# World frame
W = ReferenceFrame('W')
# Vehicle frame
v = ReferenceFrame('v')
v.orient(W,'Axis',[pi-av,W.z])
display('Rotation matrix from W to v:')
display(W.dcm(v)) <-- Check if frames are still coupled

# u frame
u = v
display(W.dcm(v))  <-- Check if frames are still coupled
u.orient(u,'Axis',[pi/2,u.z])
display(W.dcm(v)) <-- Check if frames are still coupled, from here on error!
display('Rotation matrix from w to u:')
display(u.dcm(w))

После поворота u ссылкамежду v и W рамка нарушена.Я получаю следующий вывод:

Output

Ошибка в конце:

ValueError                                Traceback (most recent call last)
<ipython-input-20-72d62c7921df> in <module>()
     17 display(W.dcm(v))
     18 u.orient(u,'Axis',[pi/2,u.z])
---> 19 display(W.dcm(v))
     20 display('Rotation matrix from w to u:')
     21 display(u.dcm(w))

c:\python\python35\lib\site-packages\sympy\physics\vector\frame.py in dcm(self, otherframe)
    409         if otherframe in self._dcm_cache:
    410             return self._dcm_cache[otherframe]
--> 411         flist = self._dict_list(otherframe, 0)
    412         outdcm = eye(3)
    413         for i in range(len(flist) - 1):

c:\python\python35\lib\site-packages\sympy\physics\vector\frame.py in _dict_list(self, other, num)
    254             return outlist[0]
    255         raise ValueError('No Connecting Path found between ' + self.name +
--> 256                          ' and ' + other.name)
    257 
    258     def _w_diff_dcm(self, otherframe):

ValueError: No Connecting Path found between W and v

Таким образом, вращая u, я разрываю связь между W и v?Я не понимаю, что я делаю здесь не так.

Информация о сервере: вы используете ноутбук Jupyter.

Версия сервера ноутбука: 5.6.0. Сервер работает на данной версии Python: Python 3.5.4 (v3.5.4).: 3f56838, 8 августа 2017 г., 02:17:05) [MSC v.1900 64 бит (AMD64)]

Редактировать: проблему можно решить:

from sympy import *
init_printing()
av = symbols('\\alpha_v')

# Reference frames
from sympy.physics.vector import *
# World frame
W = ReferenceFrame('W')
display(W)

# Vehicle frame
v = ReferenceFrame('v')
v.orient(W,'Axis',[pi-av,W.z])
display('Rotation matrix from W to v:')
display(W.dcm(v))
display(W.dcm(v))

# u frame
u = ReferenceFrame('u')
u.orient(v,'axis',[pi/2,v.z])
display(u.dcm(v))
display(W.dcm(v))

Я думалчто u = v делал копию переменной v в переменной u.Это не работает и вызывает проблему.Определение U как referenceframe и ориентируя его относительно у впоследствии это правильный способ сделать.

Единственный вопрос, который все еще остается, - как сделать копию, если вы хотите две одинаковые системы отсчета?Это единственный способ, как это?

u = ReferenceFrame('u')
u.orient(v,'axis',[0,v.z])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...