0
点赞
收藏
分享

微信扫一扫

Webots教程—C调用MATLAB引擎实时绘制图像。

kiliwalk 2022-04-13 阅读 95

本机软件环境:

Webots R2021a

MATLAB R2022a

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

c语言环境中调用matlab程序指南 - 道客巴巴

Makefile配置

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

Path环境变量配置 

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

 代码示例

#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");
    };
};
举报

相关推荐

0 条评论