webots和matlab一起用的一些报错信息分析

背景介绍

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上的回答是库和这个机器人的遥操作部分冲突了,更深入的就搞不明白了。

好了记录就这麽多,我去仿真了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值