ompl学習---参照CSDNの学習教材

ボー元のリンク:https://blog.csdn.net/ljq31446/article/category/7534293

1を学ぶためのリファレンス

コード

#include <ompl/base/SpaceInformation.h>
#include <ompl/base/spaces/SE3StateSpace.h>
#include <ompl/geometric/SimpleSetup.h>
#include <ompl/geometric/planners/rrt/RRT.h>
#include <ompl/config.h>
#include <iostream>
#include <fstream>
#include <ostream>
#include <boost/bind.hpp> //绑定函数

using namespace std;
namespace ob = ompl::base;
namespace og = ompl::geometric;

bool isStateValid(const ob::State *state) {
	//抽象类型转换为我们期望类型
	const ob::SE3StateSpace::StateType *se3state = state->as<ob::SE3StateSpace::StateType>();
	//提取第1、2状态的组成,并转换为我们期望的
	const ob::RealVectorStateSpace::StateType *pos = se3state->as<ob::RealVectorStateSpace::StateType>(0);
	const ob::SO3StateSpace::StateType *rot = se3state->as<ob::SO3StateSpace::StateType>(1);

	//确定状态是否可行,这里一直为true,避免编译器警告
	return (const void *)rot != (const void *)pos;
}

void planWithSimpleSetup() {
	//声明我们规划所在的空间维度
	ob::StateSpacePtr space(new ob::SE3StateSpace()); 
	//设置三维空间的边界
	ob::RealVectorBounds bounds(3);
	bounds.setHigh(1);
	bounds.setLow(-1);
	space->as<ob::SE3StateSpace>()->setBounds(bounds);
	//定义一个简易类
	og::SimpleSetup ss(space);

	//路径约束检查,使用bind绑定函数,参考 https://blog.csdn.net/giepy/article/details/45046737
	ss.setStateValidityChecker(boost::bind(&isStateValid,_1));
	// 随机创建一个起始点和目标点
	ob::ScopedState<> start(space),goal(space);
	start.random();
	goal.random();
	start.print();
	//加入起终点
	ss.setStartAndGoalStates(start, goal);
	//设定规划方法
	ob::PlannerPtr planner(new og::RRT(ss.getSpaceInformation()));
	ss.setPlanner(planner);
	//在规划的时间内解决
	ob::PlannerStatus solved = ss.solve(1.0);

	//解决则导出生成的路径
	if (solved) {
		cout << "Found solution\n" << endl;
		ofstream osf0("path0.txt");
		ss.getSolutionPath().printAsMatrix(osf0);
		ofstream osf1("path1.txt");
		ss.simplifySolution();
		ss.getSolutionPath().printAsMatrix(osf1);
	}
	else
		cout << "No found" << endl;
}

int main(int, char**) {
	cout << "OMPL_VERSION:" << OMPL_VERSION << endl;
	planWithSimpleSetup();
	return 0;
}

結果

1を学ぶためのリファレンス

スポットを学びます

  1. 計画の異なる方法を使用するにはどのように
    建設計画のスペースに必要な宣言: OG :: SimpleSetup SS(スペース);
    遊びの最後に追加されます。 ss.setStartAndGoalStates(ゴールを,.開始)、
    走行経路の制約かどうか: isStateValidは
    計画を追加(\ ompl様々な計画方法であっ\幾何\プランナー): OB :: PlannerPtrプランナー(新新OG :: InformedRRTstar(ss.getSpaceInformation()));
    プランニングスペースに追加: ss.setPlanner(プランナー);
    生成を経路計画: ss.solve()
    パスが?????プロセスのために発見された場合:(sloved){...} IF

  2. _1の入力が空のプレースホルダで、バインド結合機能を使用します

  3. 結果は、各列が、最初の3ビットは、グループの最後の4つの値の真の位置がSO 3で表さ表す7桁を有する生成、参照https://blog.csdn.net/qq_28448117/article/details/79644920

  4. 3次元地図は、plot3を描くMATLAB使用

2を学ぶためのリファレンス

リンクコードのリリースをフォロー

結果

ここに画像を挿入説明
ブルーは、簡略化され、パスの後に赤を見つけるために、ダイレクトパスであります

スポットを学びます

  1. その後の補間に関するクレームステータス路空間一定の影響など
  2. ss.getSolutionPlannerNameは();必要とされる方法の経路計画の名前を取得した後slovedパスがあります。(デフォルトKPIECE1 ??は最適を見つけるためにいくつかの方法かもしれません)
  3. フィル(X、Y)が充填された領域をMathWorks社のMATLAB。

3を学ぶためのリファレンス

結果

  1. また、このコードは見つかったソリューションがパスで見つけることができません表示されます
  2. 時には時間が大きすぎる設定sloveあるとき、エラーがありました
  3. エラーではなく、結果がないとき理論的には、それが見つかりべきではありません
    ここに画像を挿入説明

学習の新しいポイント

  1. 使用のためのプランナーはさらに拡大する必要があります。構造の一部は明らかではないが、

4を学ぶためのリファレンス

結果

  1. ここに画像を挿入説明
  2. ここに画像を挿入説明
  3. 時々、プログラムエラー

新しいポイントを学びます

  1. 主駆動スペースでの計画については、isStateValidによって決定することができます
  2. このような主isStateValidに使用コードおよび様々な他の場所、としてdubins用

上記ソースリンク:https://download.csdn.net/download/dan__ran/10797807

おすすめ

転載: blog.csdn.net/dan__ran/article/details/84252082