Webots:VSCode作为控制器IDE并调用Eigen库

  • Post author:
  • Post category:其他




Webots:VSCode作为控制器IDE并调用Eigen库



0.目的与最终效果

在设计机器人的控制器时无法避免的会用到很多的矩阵相关的运算,为了提高效率,采用开源矩阵运算库是比较合适的。

本文选用Eigen库作为控制器矩阵和矢量运算,数值分析及其相关的算法的运算库。


使用VSCode作为Webots控制器IDE

的配置过程参看上一篇博客。

本文介绍如何在上述VSCode作为Webots控制器IDE的基础上添加Eigen库作为控制器的矩阵运算库,配置完成后的效果如下图所示。

在这里插入图片描述

在这里插入图片描述



1.下载Eigen库

直接去

Eigen官方网站

下载最新的稳定版本

在这里插入图片描述

由于是在Windows上使用所以直接下载ZIP格式,下载完成后解压到即可。



2.在Webots控制器的Makefile中添加链接库

打开Webots生成的C++控制器的Makefile文件,在其中添加如下内容,

D:/eigen-3.4.0/Eigen

为解压后Eigen的目录

### ---- Linked libraries ----
### if your program needs additional libraries:
INCLUDE = -I D:/eigen-3.4.0/Eigen
### LIBRARIES = -L D:/eigen-3.4.0/Eigen/src/Core -lMatrix
###
### ---- Linking options ----
### if special linking flags are needed:
### LFLAGS = -s
###
### ---- Webots included libraries ----
### if you want to use the Webots C API in your C++ controller program:
### USE_C_API = true
###



3.在VSCode的c_cpp_properties.json文件中链接库

经过在Makefile文件中添加Eigen库,即可通过编译正常使用Eigen库,但此时在VSCode中对代码进行修改时并不具备自动补全功能,因此需要在c_cpp_properties.json文件中配置Eigen库路径

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "D:\\Program Files\\Webots\\include\\controller\\cpp",
                "D:\\eigen-3.4.0\\Eigen"  //Eigen库目录
               // "D:\\eigen-3.4.0\\Eigen\\src\\Core"
            ],
            "defines": [
                "${default}"
            ],
            "macFrameworkPath": [
                "${default}"
            ],
            "forcedInclude": [
                "${default}"
            ],
            "compileCommands": "${default}",
            "browse": {
                "limitSymbolsToIncludedHeaders": true,
                "databaseFilename": "${default}",
                "path": [
                    "${default}",
                    "D:\\Program Files\\Webots\\lib\\controller",
                    "D:\\eigen-3.4.0\\Eigen"  //Eigen库目录
                    //"D:\\eigen-3.4.0\\Eigen\\src\\Core"
                ]
            },
            "intelliSenseMode": "gcc-x64",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "compilerPath": "C:\\mingw64\\bin\\g++.exe"
        }
    ],
    "version": 4
}



4.头文件中包含并声明namespace

#ifndef __MAIN_H
#define __MAIN_H

#include "driver.h"
#include <Eigen>
using namespace Eigen;
#endif



5.调用

#include "main.h"
int main(int argc, char **argv) 
{
  Matrix<float,2,2> matrix_A;
  Matrix<float,2,2> matrix_B;
  Matrix<float,2,2> matrix_C;
  matrix_A << 1, 2,
              3, 4;
  matrix_B(0, 0) = 0.5;
  matrix_B(0, 1) = 0;
  matrix_B(1, 0) = 0;
  matrix_B(1, 1) = 0.5;
  matrix_C = matrix_A * matrix_B;
  cout << matrix_C;
  cout << endl;
  cout << "Hello" << endl;
  Supervisor *robot = new Supervisor();
  Driver *MyDriver = new Driver(robot,500,1000,0.8,6,0.2);
  while (robot->step(MyDriver->timeStep) != -1)
  {
  };
  delete robot;
  pthread_exit(NULL);
  return 0;
}

经过上述配置后即可调用Eigen库解决矩阵运算问题,如上述测试代码输出结果为

0.5   1
1.5   2
Hello



版权声明:本文为qq413886183原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。