ボー元のリンク: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;
}
結果
スポットを学びます
-
計画の異なる方法を使用するにはどのように
建設計画のスペースに必要な宣言: OG :: SimpleSetup SS(スペース);
遊びの最後に追加されます。 ss.setStartAndGoalStates(ゴールを,.開始)、
走行経路の制約かどうか: isStateValidは
計画を追加(\ ompl様々な計画方法であっ\幾何\プランナー): OB :: PlannerPtrプランナー(新新OG :: InformedRRTstar(ss.getSpaceInformation()));
プランニングスペースに追加: ss.setPlanner(プランナー);
生成を経路計画: ss.solve()
パスが?????プロセスのために発見された場合:(sloved){...} IF -
_1の入力が空のプレースホルダで、バインド結合機能を使用します
-
結果は、各列が、最初の3ビットは、グループの最後の4つの値の真の位置がSO 3で表さ表す7桁を有する生成、参照https://blog.csdn.net/qq_28448117/article/details/79644920
-
3次元地図は、plot3を描くMATLAB使用
2を学ぶためのリファレンス
リンクコードのリリースをフォロー
結果
ブルーは、簡略化され、パスの後に赤を見つけるために、ダイレクトパスであります
スポットを学びます
- その後の補間に関するクレームステータス路空間一定の影響など
- ss.getSolutionPlannerNameは();必要とされる方法の経路計画の名前を取得した後slovedパスがあります。(デフォルトKPIECE1 ??は最適を見つけるためにいくつかの方法かもしれません)
- フィル(X、Y)が充填された領域をMathWorks社のMATLAB。
3を学ぶためのリファレンス
結果
- また、このコードは見つかったソリューションがパスで見つけることができません表示されます
- 時には時間が大きすぎる設定sloveあるとき、エラーがありました
- エラーではなく、結果がないとき理論的には、それが見つかりべきではありません
学習の新しいポイント
- 使用のためのプランナーはさらに拡大する必要があります。。構造の一部は明らかではないが、
4を学ぶためのリファレンス
結果
- 時々、プログラムエラー
新しいポイントを学びます
- 主駆動スペースでの計画については、isStateValidによって決定することができます
- このような主isStateValidに使用コードおよび様々な他の場所、としてdubins用
上記ソースリンク:https://download.csdn.net/download/dan__ran/10797807