Robotics Library + OMPL + URDF + SRDF

测试环境/版本

  • Ubuntu 22.04
  • Robotics Library - master
  • ROS2/MoveIt2 Humble
  • OMPL 1.5
  • python3.8

一、Robotics Library + OMPL

1. 安装二进制版本的ompl

此处不对ompl做修改,故直接二进制的,默认版本为1.5

sudo apt-get install libompl-dev ompl-demos

2. 准备roboticslibrary库的master分支

一定要使用master手动编译,才有URDF加载的支持(虽然该支持还不完美)

git clone https://github.com/roboticslibrary/rl.git

3. 修改plan模块,以添加ompl支持

按照ompl集成中提到的commit修改。此时会因commit时版本过老旧,导致大量报错。故我带着大家逐步修改:

3.1 修改rl根目录下CMakeLists.txt

第9行

set(CMAKE_CXX_STANDARD 11)

set(CMAKE_CXX_STANDARD 14)

避免了报错 error: no template named ‘remove_cv_t’ in namespace ‘std’; did
you mean ‘remove_cv’?

3.2 修改rl/src/rl/plan/CMakeLists.txt

  • 首先,在

    set(HDRS ...)
    

    ,加上

     set(ompl_DIR "/usr/share/ompl/cmake")
     find_package(ompl REQUIRED)
    

    设置ompl_DIR是为了防止cmake时链接到MoveIt2 humble中默认二进制安装的OMPL1.6。
    因为观察到若链接到MoveIt2 humble中的OMPL1.6,cmake时会有大量警告。

  • 然后,在

    add_library(...)
    

    ,加上

    if(OMPL_FOUND)
        list(APPEND HDRS OMPL.h)
        list(APPEND SRCS OMPL.cpp)
        message(${SRCS})
    endif(OMPL_FOUND)
    
  • 最后,在

    target_link_libraries(...)
    

    ,加上

    if(OMPL_FOUND)
        target_include_directories(plan PUBLIC ${OMPL_INCLUDE_DIRS})
        target_link_libraries(plan ${OMPL_LIBRARIES})
    endif(OMPL_FOUND)
    

3.3 添加.h和.cpp到rl/src/rl/plan下

首先复制commit中的OMPL.h和OMPL.cpp到rl/src/rl/plan下

  • 修改OMPL.h第48行

    class OMPLPlanner : public  ::rl::plan::Planner
    

    class RL_PLAN_EXPORT OMPLPlanner : public ::rl::plan::Planner
    
  • 修改OMPL.h第62行

    virtual void getPath(VectorList& path);
    

     virtual VectorList getPath();
    

    对应的修改OMPL.cpp 339行起

      void OMPLPlanner::getPath(VectorList& path)
      {
           if (setup.haveSolutionPath())
           {
               setup.simplifySolution();
               ompl::geometric::PathGeometric& p(setup.getSolutionPath());
               path.clear();
               for (unsigned int i = 0; i < p.getStateCount(); ++i)
                   path.push_back(
                       static_cast<ompl::base::OMPLStateSpace::StateType*>(p.getState(i))->rlState);
           }
       }
    

    VectorList OMPLPlanner::getPath()
    {
        VectorList path;
        if (setup.haveSolutionPath())
        {
            setup.simplifySolution();
            ompl::geometric::PathGeometric& p(setup.getSolutionPath());
            path.clear();
            for (unsigned int i = 0; i < p.getStateCount(); ++i)
                path.push_back(
                    static_cast<ompl::base::OMPLStateSpace::StateType*>(p.getState(i))->rlState);
        }
        return path;
    }
    
  • OMPL.cpp中,改所有

    model->getMaximum(maximum);
    model->getMinimum(minimum);
    

    maximum = model->getMaximum();
    minimum = model->getMinimum();
    

    包括 改

    space_->as<OMPLStateSpace>()->model->getMaximum(maximum);
    space_->as<OMPLStateSpace>()->model->getMinimum(minimum );
    

    maximum = space_->as<OMPLStateSpace>()->model->getMaximum();
    minimum = space_->as<OMPLStateSpace>()->model->getMinimum();
    
  • 修改

    return setup.solve(this->duration);
    

    double seconds = std::chrono::duration<double>(this->duration).count();
    return setup.solve(seconds);
    
  • 修改 OMPL.cpp 223行

    virtual void project(const State *state, EuclideanProjection &projection) const
    

    virtual void project(const State *state, Eigen::Ref<Eigen::VectorXd> projection) const
    

4. 按照rl官方步骤编译

官方步骤

二、Robotics Library + URDF + SRDF

1. URDF

1.1. urdf源自ROS的机器人描述文件,若为xacro形式则需转换

ros2 run xacro xacro -o xxx.urdf yyy.xacro

注意:rl读取urdf时,对大于边长10m的geometry box会报错,目前暂时改为9.99m,或采用多个拼装为大于10m的,如

<geometry>
	<box size="5 9.99 0.05"/>
</geometry>

注意:所有""中带有数字的部分,尽量不要有多余的空格,读取时有崩溃风险,如

<origin rpy=" 1.0 0 5 " xyz="1.0  2.0  -9.0"/>    读取时有崩溃风险
<origin rpy="1.0 0 5" xyz="1.0 2.0 -9.0"/>

1.2. URDF中的filename为相对/绝对路径

待续…

2. SRDF

  1. SRDF可以由moveit_setup_assistant导出而来,我们仅使用其中disable标签中的内容.

待续…

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值