首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Bullet物理库接口到MATLAB

将Bullet物理库接口到MATLAB
EN

Stack Overflow用户
提问于 2021-06-03 00:12:08
回答 1查看 60关注 0票数 0

我正在尝试使用MATLAB中的Bullet物理库。我需要做碰撞检测,因此我想使用GJK算法。在MATLAB中,可以编译一个所谓的MEX函数。使用MEX函数,可以从MATLAB命令行调用您自己的C或C++程序,就像它们是内置函数一样。我的问题是,Bullet库非常大,有很多文件、头函数等等,而且我对编程并不是很熟悉。我寻找了更简单的实现,并发现:

https://github.com/ElsevierSoftwareX/SOFTX_2018_38

它是用C代码编写的GJK,带有一个文件,获得了想要的MEX函数。此文件如下所示:

代码语言:javascript
复制
% 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%s\n',[pwd,filesep,'openGJK.',mexext]) 
catch
    % Build failed, refer to documentation
    fprintf('\n\n 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>.\n\n')
    return
end

所以我试着用Bullet库做类似的事情,但我甚至不知道使用哪个源文件。我尝试了'src‘文件夹中的'btBulletCollisionAll.cpp’。但就像我说的,我对C++并不是很熟悉,我想知道为什么只有这么多的头文件。另外,我需要告诉MATLAB头文件在哪里,以及如何链接它们。

所以基本上我只想调用MATLAB上的一个函数,如下所示:

代码语言:javascript
复制
dist = GJK(shapeA,shapeB);

这里是子弹头存储库:https://github.com/bulletphysics/bullet3

非常感谢你的帮助

我不使用SOFTX_2018_38,因为我也需要EPA算法,我认为Bullet库是高效和健壮的实现。

EN

回答 1

Stack Overflow用户

发布于 2021-06-03 00:41:01

据我所知,.mex定义了一个单一的MATLAB函数。您所指的库似乎是一个python库,所以我建议您回顾一下quickstart guide (88页),在python中使用它,然后再考虑移植到MATLAB。

看起来你可以通过run python libraries directly in MATLAB

关于python,它是一个非常好的主题,这里不会尝试写任何其他的东西,你可以快速搜索到大量的教程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67808828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档