将OMPL与Drake一起使用

问题描述

我正在尝试在drake上使用ompl,并且在drake中使用ompl标头时遇到问题。我使用安装路径安装了ompl,并在drake中进行了以下更改:

在工作空间中添加了以下内容

new_local_repository(
    name = "ompl",path = "/usr/local/include/ompl-1.5/ompl",build_file = "ompl.BUILD",)

ompl.BUILD:

cc_library(
    name = "ompl",hdrs = glob(["**"]),includes = ["include"],visibility = ["//visibility:public"],linkstatic = 1,)

在存储库的BUILD.bazel中:

drake_cc_binary(
    name = "ompl_ex",srcs = ["src/ompl_ex.cc"],data = [],test_rule_args = ["--target_realtime_rate=0.0"],deps = [
        "@gflags","@ompl//:ompl",],)

ompl_ex.cc

#include <memory>

#include <limits.h>
#include <unistd.h>
#include <fstream>
#include <string>
#include <gflags/gflags.h>
#include <iostream>

#include <ompl/config.h>
#include <vector>

namespace drake {
namespace ompl {

int DoMain(){
    std::cout<<"the function is working"<<std::endl;
    return 0;
}

}  // namespace examples
}  // namespace drake

int main(int argc,char* argv[]) {
  gflags::ParseCommandLineFlags(&argc,&argv,true);
  return drake::ompl::DoMain();
}

我得到的错误

infinite_horizon_ltl/src/ompl_ex.cc:10:10: Fatal error: ompl/config.h: No such file or directory
 #include <ompl/config.h>

我类似地使用现货库,它们似乎运行良好。不知道在OMPL方面我出了什么问题。我检查了drakes git问题,发现曾经尝试进行集成,但是现在删除了该分支,并且提出的解决方案似乎在我的系统上不起作用。

解决方法

我发现在drake项目中使用cmake作为外部库是最容易的。 ompl可以很好地工作。这是一个快速示例,将drakeompl都导入为外部库并解决了一个简单的计划问题。

https://github.com/DexaiRobotics/drake-torch/tree/master/examples/drake-ompl

使用dexai2/drake-torch/cpu-nightly-ros泊坞窗制作输出和视频,可在此处使用:https://hub.docker.com/r/dexai2/drake-torch/tags

顺便说一句,根据您使用的Ubuntu版本,您可能需要更改gcc版本-例如对于Ubuntu 20.04,您需要在gcc-9中指定的g++-9CMakeLists.txt,在18.04上需要gcc-7g++-7。在此处查看注释:https://drake.mit.edu/developers.html#id10

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...