背景介绍
matlab 2021a
webots 2021b
mingw c\c++ 6.3
我想用webots和matlab联合仿真,主要是matlab想要利用matlab中的工具人工具箱进行运动学和逆运动学的计算,同时可以通过逆动力学进行机器人的力控。
ok,第一步是下载demo,下载了官网上的demo
如下图
同时参考花洛兮的博客进行了配置,通过matlab下载了mingw,版本没错是对应我的matla
我出现的问题如下
首先解释一下二者联合仿真的原理,大概就是webots内部lib里面有着所有功能的.m funtion文件,控制器为.m文件的时候,会从环境变量找到matlab的位置,第一时间打开lancher.m文件,里面是一些对环境变量的调用和对仿真流程的判断
% Launcher script for MATLAB Webots controllers
% useful env variables supplied by webots
WEBOTS_HOME = getenv('WEBOTS_HOME');
WEBOTS_CONTROLLER_NAME = getenv('WEBOTS_CONTROLLER_NAME');
WEBOTS_VERSION = getenv('WEBOTS_VERSION');
if isempty(WEBOTS_CONTROLLER_NAME)
disp('Entering test mode (normally launcher.m should be called by Webots, not from the MATLAB command line)');
disp(['Using MATLAB R' version('-release')]);
cd('../..');
WEBOTS_HOME = pwd;
[status, cmdout] = system('msys64/mingw64/bin/webots.exe --version');
WEBOTS_VERSION = strrep(cmdout(17:end-1),'.','_');
cd('lib/matlab');
disp(['Using Webots ' strrep(WEBOTS_VERSION,'_','.') ' from ' pwd ])
test_mode = true;
else
test_mode = false;
end
%如果WEBOTS_CONTROLLER_NAME为空,则进入test_mode
% add path to Webots API m-files
addpath([WEBOTS_HOME '/lib/matlab']); %添加了matlab的.m函数库到搜索路径
%强势启用插件 17.03
%强势启动失败 17.13
% if ~matlab.addons.isAddonEnabled('MATLAB Support for MinGW-w64 C/C++ Compiler')
% % 启用插件
% matlab.addons.enableAddon('MATLAB Support for MinGW-w64 C/C++ Compiler');
% disp('已启用插件:');
% else
% disp('已启用插件:');
% end
if ispc %查看是否为windows系统
setenv('MINGWROOT', strcat(WEBOTS_HOME,'\\msys64\\mingw64'));
libname = 'Controller';
installed_addons = matlab.addons.installedAddons;
Identifier1=installed_addons.Identifier ;
installed = sum(Identifier1 == "ML_MINGW");
if installed <= 0 || matlab.addons.isAddonEnabled("ML_MINGW") <= 0
disp('大兄弟The MATLAB "MinGW-w64 C/C++ Compiler" addon is not installed, please install it from: https://fr.mathworks.com/matlabcentral/fileexchange/52848-matlab-support-for-mingw-w64-c-c-compiler');
end
addpath([WEBOTS_HOME '/msys64/mingw64/bin']); %查看后发现有这个文件夹
else
libname = 'libController';
% add path to libController
addpath([WEBOTS_HOME '/lib']);
end
%上方主要是设置了test_mode 和检测了一下MinGW-w64 C/C++ Compiler的安装情况
这是前半部分,后半部分也差不多。
然后就是这个让人揪心的报错是怎么来的,(我下载的demo有问题,里面除了E-pack还有一个robot,需要删除robot)。
又回到了这个图,开始分析
第一行显示找不到D:\SOFTWARE\weobot\webots\Webots\lib\matlab
再文件夹里面那发现确实没有这个东西,真实的路径是:
D:\SOFTWARE\weobot\webots\Webots\lib\controller\matlab
简单,直接复制粘贴,把该文件夹直接复制过去hhh(后面其实是可以改lancher文件的)
操作后前4行报错就没有了。
第5行 首先这个报错是谁报的?对没错是lancher.m
里面判断了是否安装了MinGW-w64 C/C++ Compiler这个插件
但是我已经安装了,为什么还报错?
打出来Identifier1=installed_addons.Identifier ;
之后发现这个里面出来的插件数量比从命令行窗口打出来的少一个,少的就是这个MinGW-w64 C/C++ Compiler,所以还是会报这个没安装的问题,经过测试之后发现,webots调用lancher.m的时候,是没有这个插件的,但是在webots弹出来的命令行中查询,是有的,而且应该不影响使用(我尝试强制启动这个插件,但是报错了,具体原因没时间探究了)
然后就是运行中webots下面会出现的报错
在git上也有发现有人问这个问题,但是他的问题和我的还不一样,他是报错的同时,demo不能动,我是可动的,但是会报错(感觉他的不能动的问题和这个无关)
然后这个报错在metlab中打断点发现是在主循环第一次判断
while wb_robot_step(TIME_STEP) ~= -1
时候报错的,里面和这个差不多,所有的.m函数都是这样的,去动态链接库里面调用数据
主要就是去是但是前几个就没有问题,在进入主循环的时候出现了报错,git上的回答是库和这个机器人的遥操作部分冲突了,更深入的就搞不明白了。
好了记录就这麽多,我去仿真了