Webots调用MATLAB引擎实时绘制图像。

软件环境:

Webots R2021a,控制器用的C语言

MATLAB R2022a

此表格后续会用到,先不做解释

Makefile配置

Webots项目c语言控制器目录下有一个Makefile文件,打开,找到这几行代码。

### ---- Linked libraries ----
### if your program needs additional libraries:
### INCLUDE = -I"/my_library_path/include"
### LIBRARIES = -L"/path/to/my/library" -lmy_library -lmy_other_library

修改INCLUDE和LIBRARIES这两行代码,保存。INCLUDE对应Matlab引擎头文件.h路径,LIBRARIES对应Matlab引擎库文件.dll路径,后续代码示例里用到了eng和mx开头的函数,所以这里是-llibeng -llibmx。

### ---- Linked libraries ----
### if your program needs additional libraries:
INCLUDE = -I"D:\program files\MATLAB\R2022a\extern\include"
LIBRARIES = -L"D:\program files\MATLAB\R2022a\bin\win64" -llibeng -llibmx

这些配置非常必要,否则Webots编译时会报错。

Path环境变量配置 

添加这四个路径,然后重启电脑。 

这四个缺一不可,否则Webots编译时会报错。

 代码示例

有一些文章讲的很详细,这里不做过多解释,只提供一个成功运行的案例。

#include <webots/robot.h>
#include "engine.h"    //按道理需要engine.h和matrix.h,但是engine.h头文件代码里已经有了matrix.h

int main()
{
    wb_robot_init();
    float velocity = 1;

    Engine *ep = engOpen(NULL);
    engEvalString(ep, "t = [0]");
    engEvalString(ep, "velocity = 0");
    engEvalString(ep, "p = plot(t, velocity)");
    mxArray* temp = mxCreateDoubleMatrix(1,1,mxREAL);
    *mxGetPr(temp) = 0;
    engPutVariable(ep, "temp", temp);
    engEvalString(ep, "i = 0");

    while(wb_robot_step(TIME_SETP) != -1)
    {
        engEvalString(ep, "i += 1");
        engEvalString(ep, "t = [t 0.001*i]");
        *mxGetPr(temp) = velocity;
        engPutVariable(ep, "temp", temp);
        engEvalString(ep, "velocity = [velocity temp]");
        engEvalString(ep, "set(p, {'XData'}, {t}, {'YData'}, {velocity})");
        engEvalString(ep, "drawnow");
    };
};

效果演示

这个是我仿真平衡车时绘制出来的图像,有了这个方便多了。

ChatGPT4

用ChatGPT4理解上述代码:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值