Интерфейс библиотеки физики пули для MATLAB

#matlab #collision-detection #bulletphysics #bullet

Вопрос:

Я пытаюсь использовать физическую библиотеку Bullet в MATLAB. Мне нужно выполнить обнаружение столкновений, и поэтому я хочу использовать алгоритм GJK. В MATLAB можно скомпилировать так называемую функцию MEX. С помощью функции MEX можно вызывать свои собственные программы на C или C из командной строки MATLAB, как если бы они были встроенными функциями. Моя проблема в том, что библиотека Bullet очень большая, с большим количеством файлов, функцией заголовка и так далее, и я действительно не знаком с программированием. Я искал более простые реализации и нашел:

https://github.com/ElsevierSoftwareX/SOFTX_2018_38

Это GJK, написанный на C-коде с файлом, который получает нужную функцию MEX. Этот файл выглядит так:

 % CLEAR ALL VARIABLES
clearvars

% SELECT OPTIMISATION FLAG - FASTER BUT NOT SUITABLE FOR DEBUGGING
if 0
    optflug = '-g'; %#ok<*UNRCH>
else
    optflug = '-O';
end
% SELECT SILET COMPILATION MODE.
if 1 
    silflag = '-silent'; 
else
    silflag = '-v';
end

% TRY COMPILING MEX FILE
fprintf('Compiling mex function... ')
try
mex('../lib/src/openGJK.c',...  % Source of openGJK 
    '-largeArrayDims', ...      % Support large arrays
    optflug, ...                % Compiler flag for debug/optimisation
    '-I../lib/include',...      % Folder to header files
    '-outdir', pwd,...          % Ouput directory for writing mex function
    '-output', 'openGJK',...    % Name of ouput mex file
    '-DMATLABDOESMEXSTUFF',...  % Define variable for mex function in source files
    silflag )                   % Silent/verbose flag

    % File compiled without errors. Return path and name of mex file
    fprintf('completed!n')
    fprintf('The following mex file has been generated:')
    fprintf('t%sn',[pwd,filesep,'openGJK.',mexext]) 
catch
    % Build failed, refer to documentation
    fprintf('nn ERROR DETECTED! Mex file cannot be compiled.n')
    fprintf('tFor more information, see ')
    fprintf('<a href="http://www.mathworks.com/help/matlab/ref/mex.html">this documentation page</a>.nn')
    return
end
 

Поэтому я попытался сделать то же самое с библиотекой Bullet, но я даже не знаю, какой исходный файл использовать. Я попробовал ‘btBulletCollisionAll.cpp» в папке «src». Но, как я уже сказал, я не очень хорошо знаком с C , и мне интересно, почему существует только много заголовочных файлов. Также мне нужно сообщить MATLAB, где находятся файлы заголовков и как их связать.

Так что в принципе я просто хочу вызвать функцию в MATLAB, как это:

 dist = GJK(shapeA,shapeB);
 

Вот хранилище пуль:
https://github.com/bulletphysics/bullet3

Большое спасибо за вашу помощь

Дополнение: Я не использую SOFTX_2018_38, потому что мне также нужен алгоритм EPA, и я думаю, что библиотека Bullet является эффективной и надежной реализацией.

Комментарии:

1. Вы не можете просто скомпилировать библиотеку, необходимо выполнить некоторые настройки. Все объясняется в документации

2. Эй, обчардон, я знаю, что не могу скомпилировать всю библиотеку сразу. Но было бы полезно знать, какой исходный файл я должен скомпилировать и какие файлы заголовков мне нужно связать для этого, чтобы получить такую функцию: [dist,simplex] = GJK(shapeA, shapeB) и penetrationDepth = EPA(shapeA, shapeB, simplex)

Ответ №1:

Насколько я знаю, файл .mex определяет одну функцию MATLAB. Библиотека, на которую вы указали, похоже, является библиотекой python, поэтому я бы посоветовал вам ознакомиться с руководством по быстрому запуску (88 страниц), использовать его на python, а затем подумать о переносе в MATLAB.

Похоже, вы можете запускать библиотеки python непосредственно в MATLAB

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

Комментарии:

1. Привет @Боб, спасибо за ваш быстрый ответ. Мне было интересно, что оригинал «bulletphysics.org» веб-сайт передает вам tp «pybullet.org». Поэтому я немного сбит с толку, потому что документ, а также краткое руководство по началу работы говорят мне, что он написан на C . Также GitHub показывает, что около 80 процентов кода на C

2. Он написан на C , но для интерфейса python. Вы могли бы перевести весь интерфейс, но это не очень хорошая идея делать это до того, как вы очень хорошо поймете API. Если вы понимаете API, я думаю, вы будете рады сделать свое приложение на python. И даже если вам нужна MATLAB, вы можете создать пользовательский интерфейс из слоя python вместо слоя C . Отказ от ответственности: Я не знаю библиотеку, я даю только общие советы.

3. а, ладно. Я попытался установить pybullet, но у меня ничего не вышло. Похоже, что мне нужен «пип», и я получаю ошибку. Я действительно большой любитель в этих вещах и не знаю, что делать. Я должен работать с MATLAB (работаю над своей бакалаврской диссертацией, поэтому я должен использовать MATLAB). Я даже не знаю, можно ли подключить Python к MATLAB. Но я знаю, что могу использовать функции, реализованные с помощью C , потому что я видел статьи, в которых они их используют. Тем не менее спасибо вам за вашу помощь.

4. Если вы настаиваете, вы можете создать исходный файл C MEX . От вас не должно требоваться использовать какой-либо конкретный инструмент в университете, он предназначен для того, чтобы открывать возможности, а не закрывать их. Но, как я уже сказал, вы создадите функцию только с помощью файла MEX. Удачи тебе в этом.