Ompl初探

news2024/11/17 11:35:09

在/ompl-1.x.0/build/Release/bin下有很多生成的demo可执行文件

在终端执行 ./demo_Point2DPlanning
在这里插入图片描述
测试程序

#include <ompl/base/SpaceInformation.h>
#include <ompl/base/spaces/SE3StateSpace.h>
#include <ompl/base/StateSpace.h>
#include <ompl/base/Path.h>
#include <ompl/base/spaces/RealVectorBounds.h>
#include <ompl/base/spaces/RealVectorStateSpace.h>
#include <ompl/base/StateValidityChecker.h>
#include <ompl/base/OptimizationObjective.h>
#include <ompl/base/objectives/PathLengthOptimizationObjective.h>
// #include <ompl/geometric/planners/rrt/RRT.h>
#include <ompl/geometric/planners/rrt/RRTstar.h>
#include <ompl/geometric/SimpleSetup.h>
#include <ompl/config.h>
 
#include <iostream>
#include <fstream>
#include <ostream>
#include "boost/bind.hpp"
 
namespace ob = ompl::base;
namespace og = ompl::geometric;
 
class ValidityChecker: public ob::StateValidityChecker{
  public:
  ValidityChecker(const ob::SpaceInformationPtr & si):
    ob::StateValidityChecker(si){}
  
  bool isValid(const ob::State* state) const{
    return this->clearance(state)>0.0;
  }
  
  double clearance(const ob::State* state) const{
    const ob::RealVectorStateSpace::StateType* state2D = 
       state->as<ob::RealVectorStateSpace::StateType>();
 
       double x = state2D->values[0];
       double y = state2D->values[1];
 
       return sqrt((x - 0.5)*(x - 0.5) + (y-0.5)*(y-0.5)) - 0.25;
  }
};
 
ob::OptimizationObjectivePtr getPathLengthObjective(const ob::SpaceInformationPtr& si){
  return ob::OptimizationObjectivePtr(new ob::PathLengthOptimizationObjective(si));
}
 
void OptimalPlanningRRTStar(){
  ob::StateSpacePtr space(new ob::RealVectorStateSpace(2));
 
  space->as<ob::RealVectorStateSpace>()->setBounds(0.0,1.0);
 
  ob::SpaceInformationPtr si(new ob::SpaceInformation(space));
  si->setStateValidityChecker(ob::StateValidityCheckerPtr(new ValidityChecker(si)));
  si->setup();
 
  ob::ScopedState<> start(space);
  start->as<ob::RealVectorStateSpace::StateType>()->values[0] = 0.0;
  start->as<ob::RealVectorStateSpace::StateType>()->values[1] = 0.0;
 
  ob::ScopedState<> goal(space);
  goal->as<ob::RealVectorStateSpace::StateType>()->values[0] = 1.0;
  goal->as<ob::RealVectorStateSpace::StateType>()->values[1] = 1.0;
 
  ob::ProblemDefinitionPtr pdef(new ob::ProblemDefinition(si));
  pdef->setStartAndGoalStates(start,goal);
  pdef->setOptimizationObjective(getPathLengthObjective(si));
 
  ob::PlannerPtr optimizingPlanner(new og::RRTstar(si));
  optimizingPlanner->setProblemDefinition(pdef);
  optimizingPlanner->setup();
 
  ob::PlannerStatus solved = optimizingPlanner->solve(1.0);
 
  if(solved){
    std::cout<<"---------solved!--------"<<std::endl;
    og::PathGeometric* path = pdef->getSolutionPath()->as<og::PathGeometric>();
    std::cout<<"path point number="<<path->getStateCount()<<std::endl;
    std::ofstream ofs0("../path_rrt_star.dat");
 
    for(size_t path_idx = 0; path_idx < path->getStateCount(); path_idx++){
      const ob::RealVectorStateSpace::StateType *state = path->getState(path_idx)->as<ob::RealVectorStateSpace::StateType>();
      std::cout<<"i="<<path_idx<<",(x,y)="<<state->values[0]<<","<<state->values[1]<<std::endl;
      ofs0<<state->values[0]<<" "<<state->values[1]<<std::endl;
    }
    pdef->getSolutionPath()->print(std::cout);
  }
 
}
 
int main(){
  OptimalPlanningRRTStar();
  return 0;
}
find_package(ompl REQUIRED)
include_directories(${OMPL_INCLUDE_DIRS})
link_directories(${OMPL_LIBRARY_DIRS})
add_definitions(${OMPL_DEFINITIONS})
find_package(Boost COMPONENTS system REQUIRED)
add_executable(test_rrtstar src/ompl_test/rrtstar.cc)
target_link_libraries(test_rrtstar ${Boost_LIBRARIES} ${OMPL_LIBRARIES})

可视化脚本

from mpl_toolkits.mplot3d import Axes3D
import numpy
import matplotlib.pyplot as plt
from matplotlib.patches import Circle
 
cir1 = Circle(xy = (0.5,0.5),radius=0.25,alpha=0.5)
data = numpy.loadtxt('path_rrt_star.dat')
#data1= numpy.loadtxt('obstacle.dat')
fig = plt.figure()
ax=fig.add_subplot(111)
ax.add_patch(cir1)
#ax = fig.gca(projection='3d')
plt.plot(data[:,0],data[:,1],'.-')
plt.hold('on')
plt.grid('on')
#plt.fill(data1[:,0],data1[:,1],'.-')
#plt.hold('on')
#plt.grid('on')
plt.show()

python3 mpplot.py

在这里插入图片描述

需要安装mpl_toolkits

python中绘制3D图形,依旧使用常用的绘图模块matplotlib,但需要安装mpl_toolkits工具包,安装方法如下:windows命令行进入到python安装目录下的Scripts文件夹下,执行: pip install --upgrade matplotlib即可、

不过这里暂时没用

import numpy
import matplotlib.pyplot as plt
from matplotlib.patches import Circle

data=numpy.loadtxt("path_rrt_star.dat")
T=numpy.arctan2(data[:,0],data[:,1])

plt.scatter(data[:,0],data[:,1],s=80,c=T,alpha=0.5)
plt.show()
python3 mpplot2.py

ref

http://ompl.kavrakilab.org/optimalPlanningTutorial.html

https://www.cnblogs.com/Pythonmiss/p/10690056.html
Walk towards the throne

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/921574.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python“牵手”蘑菇街商品详情API接口运用场景及功能介绍,蘑菇街接口申请指南

蘑菇街是专注于时尚女性消费者的电子商务网站&#xff0c;是时尚和生活方式目的地。 蘑菇街通过形式多样的时尚内容等时尚商品&#xff0c;让人们在分享和发现流行趋势的同时&#xff0c;享受购物体验。蘑菇街不是一个购物平台&#xff0c;它是一个购物指南网站&#xff0c;帮…

python3对接godaddy API,实现自动更改域名解析(DDNS)

python3对接godaddy API&#xff0c;实现自动更改域名解析&#xff08;DDNS&#xff09; 文章开始前&#xff0c;先解释下如下问题&#xff1a; ①什么是域名解析&#xff1f; 域名解析一般是指通过一个域名指向IP地址&#xff08;A解析&#xff09;&#xff0c;然后我们访问…

缓存之争:Redis和JVM面对面,你会选谁?

大家好&#xff0c;我是你们的小米&#xff01;今天要和大家聊聊一个在技术面试中经常被问到的问题&#xff1a;Redis缓存和JVM缓存有什么区别呢&#xff1f;相信这个问题在不少小伙伴的面试路上都遇到过&#xff0c;今天就让我们来深入剖析一下吧&#xff01; 缓存的作用和意…

【Spring Boot】详解条件注解以及条件拓展注解@Conditional与@ConditionalOnXxx

Spring Conditional Spring 4.0提供的注解。作用是给需要装载的Bean增加一个条件判断。只有满足条件才会装在到IoC容器中。而这个条件可以由自己去完成的&#xff0c;可以通过重写Condition接口重写matches()方法去实现自定义的逻辑。所以说这个注解增加了对Bean装载的灵活性。…

基于FPGA视频接口之HDMI2.0编/解码

简介 为什么要特别说明HDMI的版本,是因为HDMI的版本众多,代表的HDMI速度同样不同,当前版本在HDMI2.1速度达到48Gbps,可以传输4K及以上图像,但我们当前还停留在1080P@60部分,且使用的芯片和硬件结构有很大差别,故将HDMI分为两个部分说明1080@60以下分辨率和4K以上分辨率(…

怎么写出更好的高质量内容输出

为了更好地输出高质量的内容&#xff0c;不仅仅需要了解写作的基本原则&#xff0c;还需要深入挖掘目标读者的需求、持续的自我提升以及对信息的严格筛选。以下是一些建议&#xff0c;帮助你更好地输出高质量的内容&#xff1a; 1.充分了解你的受众 调查和了解你的目标读者&am…

SpringBoot整合阿里云OSS,实现图片上传

在项目中&#xff0c;将图片等文件资源上传到阿里云的OSS&#xff0c;减少服务器压力。 项目中导入阿里云的SDK <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.10.2</version>…

1985-2021年30m全国逐年土地覆被数据(含分省数据)

1.研究背景 2022年8月,武汉大学杨杰和黄昕教授团队向公众发布了CLCD 2021年全国土地覆数据。 中国在过去几十年中经济和人口迅速发展,土地覆盖随之发生巨大变化,因此迫切需要对其进行连续和精细的监测。然而,由于缺乏足够的训练样本和计算能力,基于卫星遥感观测数据的中国…

问道管理股市资讯:影视股集体走高,暑期档票房持续破纪录

影视股24日盘中集体走高&#xff0c;截至发稿&#xff0c;幸福蓝海、金逸影视涨停&#xff0c;上海电影、横店影视涨约8%&#xff0c;百纳千成、光线传媒涨约5%&#xff0c;中国电影、唐德影视、华谊兄弟等涨超3%。 上海问道私募基金管理有限公司&#xff08;百度一下问道管理&…

完成出版工作

书籍完成出版&#xff0c;正式上线售卖。若有需要&#xff0c;可在淘宝&#xff0c;当当&#xff0c;京东这些平台上都可以搜索到&#xff0c;书名是《多智能体机器人系统控制及其应用》&#xff0c;提前感谢&#xff0c;封面如下。 至于本专栏&#xff0c;留作大家讨论和书籍…

当一个程序员决定穿上粉色裤子

作为一个大众眼中的“非典型程序员”&#xff0c;我喜欢拥抱时尚和潮流&#xff0c;比如我经常在演讲时穿粉色裤子&#xff0c;这甚至已经成为一个标志性打扮。某天又逢主题演讲日&#xff0c;我站在衣柜前挑选上衣的时候&#xff0c;忽然灵光乍现&#xff1a;有没有可能借助 M…

基于jenkins自动化部署PHP环境

实验环境 操作系统 IP地址 主机名 角色 CentOS7.5 192.168.147.141 git git服务器 CentOS7.5 192.168.147.142 Jenkins git客户端 jenkins服务器 CentOS7.5 192.168.147.143 web web服务器 具体环境配置见上一篇&#xff01; 准备git仓库 [rootgit ~]# su -…

如何写好公文材料

写好公文材料需要具备一定的写作技巧&#xff0c;同时也需要对公文的格式、语言和结构有深入的了解。以下是如何写好公文材料的建议和步骤&#xff1a; 1.确定公文的目的 在开始写作前&#xff0c;明确公文的目的。它是为了传达什么样的信息&#xff1f;是通知、申请、报告、建…

专题-【十字链表】

有向图的十字链表表示法&#xff1a;

U盘文件恢复,拯救文件,只需简单3招!

“u盘文件删掉了还能恢复吗&#xff1f;七夕和对象吵架了&#xff0c;一气之下把之前一起旅游的照片视频都删了&#xff0c;今天看到空空的u盘&#xff0c;心里真的很难受。有什么方法可以恢复u盘文件吗&#xff1f;” U盘在我们的日常生活中已经扮演了很重要的角色&#xff0c…

TC1016-同星4路CAN(FD),2路LIN转USB接口卡

TC1016是同星智能推出的一款多通道CAN&#xff08;FD&#xff09;和LIN总线接口设备&#xff0c;CANFD总线速率最高支持8M bps&#xff0c;LIN支持速率0~20K bps&#xff0c;产品采用高速USB2.0接口与PC连接&#xff0c;Windows系统免驱设计使得设备具备极佳的系统兼容性。 支…

【附安装】R语言4.3.0安装教程

软件下载 软件&#xff1a;R语言版本&#xff1a;4.3.0语言&#xff1a;简体中文大小&#xff1a;77.74M安装环境&#xff1a;Win7及以上版本&#xff0c;64位操作系统硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨64位下载链接&#xff1a;h…

android Junit4编写自测用例

10多年的android开发经验&#xff0c;一直以来呢&#xff0c;也没有使用过android自带的测试代码编写。说来也惭愧。今天也花了点时间稍微研究了下。还挺简单。接下来就简单的说一下。 新建工程 直接默认新建一个工程&#xff0c;就会有两个目录androidTest和test(unitTest)两…

漏洞复现 || muhttpd 任意文件读取

漏洞描述 muhttpd&#xff08;mu-HTTP-deamon&#xff09;是一个简单但完整的web服务器&#xff0c;用可移植的ANSI C编写。它支持静态页面、CGI脚本、基于MIME类型的处理程序和HTTPS&#xff0c;muhttpd 1.1.7之前版本存在安全漏洞。攻击者利用该漏洞读取系统任意文件。 免责…

免费制作高质量的电子期刊网站

工具介绍&#xff1a;FLBOOK 打开FLBOOK首页就能看见有四五本高质量的电子书刊&#xff0c;并且每打开一本&#xff0c;书的最下方就有阅读次数的统计。 FLBOOK制作电子期刊的方法也非常简单&#xff0c;可以根据小编的步骤开始制作或是看FLBOOK的教程&#xff0c;亲自动手制作…