Я хочу, чтобы объект, сгенерированный существующим сценарием MATLAB, был смоделирован во FreeCAD. См. Полужирные заголовки для важного содержания Intro, кода Matlab, кода Python, тестирования через терминал, ошибки Matlab, примечаний (ОС, версии)
Введение
У меня отработаны все стороны процесса, но у меня возникают проблемы с вызовом скрипта python через MATLAB.
У меня есть как конструктор объектов, так и скрипт, который работает для построения вещей в FreeCAD; по сути, у меня есть любой конец. Теперь мне нужно их интерфейс.
Мой тест является базовым, но этого должно было быть достаточно, или я так предположил.
Matlab:
pyfile = '~/Desktop/FreeCADworkspace/testvec2.py';
filename = 'atestname';
call = "python " + pyfile + " " + filename;
[status,result] = system("sh ~/Desktop/FreeCADworkspace/freecad.sh")
Python:
# Import python roots
import sys
import os
sys.path.append('/usr/lib/freecad-python2/lib')
sys.path.append('/usr/lib/freecad/lib')
# Other imports
import numpy as np
import math
# Import FreeCAD and parts
import FreeCAD
from FreeCAD import Base
import Part, Sketcher, Draft
try:
filename = sys.argv[1]
except: # this should never be thrown, exists for testing and other integration
print('No arguments called into script.')
print('Please use format: python thisScript.py arg_filename')
quit() # exit script
print(filename) # checkmeplz
Итак, в сущности, я должен получить распечатку определения filename в MATLAB. В этом случае я должен увидеть 'atestname'
Тестирование
Если я позвоню через терминал:
python ~/Desktop/FreeCADworkspace/testvec2.py atestname
Я получаю:
FreeCAD 0.18.1, Libs: 0.18.1R
atestname
Что именно так, как и ожидалось. То же самое нельзя сказать о моем MATLAB
ОШИБКА MATLAB
Traceback (most recent call last):
File "/home/ashaiden/Desktop/FreeCADworkspace/testvec2.py", line 11, in <module>
import FreeCAD # no FreeCADGui??
ImportError: /usr/lib/freecad-python2/lib/libFreeCADBase.so: undefined symbol: _ZN11xercesc_3_111InputSource11setEncodingEPKt
Я также пытался выполнить скрипт python из MATLAB через скрипт bash. Та же ошибка.
Что меня смущает: почему какая-то команда, которая отлично выполняется через терминал, не будет работать при вызове через MATLAB?
Я чувствую, что неправильно понимаю, как выполняются системные вызовы MATLAB. Я предположил, что вызов был отправлен и обработан самой ОС. Но если это так, было бы бессмысленно получать ошибку. MATLAB выполняет интерпретацию файлов, которые он обрабатывает?
Примечания
- Операционная система: Ubuntu 16.04
- MATLAB 2018b
- Python 2.7 -> это проблема? Python 2, казалось, был языком по умолчанию для моей конкретной установки FreeCAD.
- FreeCAD 0.18.1
Редактировать
После долгих поисков, проведенных мной и моим руководителем, выясняется, что это может привести к конфликту между двоичными файлами.
В MATLAB есть libxerces-c.so файлов, определенных в / bin / glnxa64 / и другой папке набора инструментов.
Они могут конфликтовать с бинарным файлом linux / usr / lib / x86_64-linux-gnu / libxerces-c.so , так что когда терминал вызывается через matlab, он использует бинарный файл matlab вместо двоичный файл системы.
Я буду продолжать расследование.