Main MRPT website > C++ reference for MRPT 1.9.9
test.cpp
Go to the documentation of this file.
1 /* +------------------------------------------------------------------------+
2  | Mobile Robot Programming Toolkit (MRPT) |
3  | http://www.mrpt.org/ |
4  | |
5  | Copyright (c) 2005-2018, Individual contributors, see AUTHORS file |
6  | See: http://www.mrpt.org/Authors - All rights reserved. |
7  | Released under BSD License. See details in http://www.mrpt.org/License |
8  +------------------------------------------------------------------------+ */
9 
10 #include <mrpt/nav.h>
11 #include <mrpt/maps/CSimpleMap.h>
12 #include <mrpt/system/filesystem.h> // directoryExists(), ...
15 #include <mrpt/random.h>
18 
19 #include <iostream>
20 
21 using namespace mrpt;
22 using namespace mrpt::nav;
23 using namespace mrpt::maps;
24 using namespace std;
25 
26 // Load example grid map
27 #include <mrpt/examples_config.h>
28 string mySimpleMap(
29  MRPT_EXAMPLES_BASE_DIRECTORY +
30  string("../share/mrpt/datasets/malaga-cs-fac-building.simplemap.gz"));
31 string myCfgFileName(
32  MRPT_EXAMPLES_BASE_DIRECTORY +
33  string(
34  "../share/mrpt/config_files/navigation-ptgs/"
35  "ptrrt_config_example1.ini"));
36 
37 // ------------------------------------------------------
38 // TestRRT1
39 // ------------------------------------------------------
40 void TestRRT1()
41 {
43 
44  // Load the gridmap:
45  CSimpleMap simplemap;
46 
48 
49  cout << "Loading map...";
50  {
52  auto arch = mrpt::serialization::archiveFrom(f);
53  arch >> simplemap;
54  }
55  cout << "Done! Number of sensory frames: " << simplemap.size() << endl;
56 
57  // Set planner params:
58  // ------------------------------
60 
61  // Parameters:
63 
64  planner.params.maxLength = 2.0;
65  planner.params.minDistanceBetweenNewNodes = 0.10;
67  planner.params.goalBias = 0.05;
68 
69  // Logging:
70  planner.params.save_3d_log_freq =
71  0; // 500; // save some iterations for debugging
72 
73  // End criteria:
74  planner.end_criteria.acceptedDistToTarget = 0.25;
76  DEG2RAD(180); // 180d=Any orientation is ok
77  planner.end_criteria.maxComputationTime = 15.0;
79  1.0; // 0=accept first found acceptable solution
80 
81  // Init planner:
82  // ------------------------------
83  planner.initialize();
84 
85  // Set up planning problem:
86  // ------------------------------
89 
90  // Start & goal:
91  planner_input.start_pose = mrpt::math::TPose2D(0, 0, 0);
92  planner_input.goal_pose = mrpt::math::TPose2D(-20, -30, 0);
93 
94  // Obstacles:
95  planner_input.obstacles_points.loadFromSimpleMap(simplemap);
96  mrpt::math::TPoint3D bbox_min, bbox_max;
97  planner_input.obstacles_points.boundingBox(bbox_min, bbox_max);
98  // Convert gridmap -> obstacle points:
99  // gridmap.getAsPointCloud( planner_input.obstacles_points );
100 
101  // Workspace bounding box:
102  planner_input.world_bbox_min = mrpt::math::TPoint2D(bbox_min.x, bbox_min.y);
103  planner_input.world_bbox_max = mrpt::math::TPoint2D(bbox_max.x, bbox_max.y);
104 
105 // size_t iters=0;
106 // Show results in a GUI and keep improving:
107 #if MRPT_HAS_WXWIDGETS
108  mrpt::gui::CDisplayWindow3D win("Result", 1024, 800);
109  while (win.isOpen())
110 #else
111  for (size_t i = 0; i < 1; i++)
112 #endif
113  {
114  // Refine solution or start over:
115  bool refine_solution = false; // (iters++ % 5 != 0);
116 
117  // Start from scratch:
118  if (!refine_solution)
119  planner_result = PlannerRRT_SE2_TPS::TPlannerResult();
120 
121  // Do path planning:
122  planner.solve(planner_input, planner_result);
123 
124  cout << "Found goal_distance: " << planner_result.goal_distance << endl;
125  cout << "Found path_cost: " << planner_result.path_cost << endl;
126  cout << "Acceptable goal nodes: "
127  << planner_result.acceptable_goal_node_ids.size() << endl;
128 
129 #if MRPT_HAS_WXWIDGETS
130  // Show result in a GUI:
131  mrpt::opengl::COpenGLScene::Ptr& scene = win.get3DSceneAndLock();
132 
133  scene->clear();
134 
135  PlannerRRT_SE2_TPS::TRenderPlannedPathOptions render_opts;
136  render_opts.highlight_path_to_node_id =
137  planner_result.best_goal_node_id;
138 
139  planner.renderMoveTree(
140  *scene, planner_input, planner_result, render_opts);
141 
142  win.unlockAccess3DScene();
143  win.repaint();
144  win.waitForKey();
145 #endif
146  }
147 }
148 
149 int main(int argc, char** argv)
150 {
151  try
152  {
153  TestRRT1();
154  return 0;
155  }
156  catch (exception& e)
157  {
158  cout << "MRPT exception caught: " << e.what() << endl;
159  return -1;
160  }
161  catch (...)
162  {
163  printf("Another exception!!");
164  return -1;
165  }
166 }
mrpt::random::Randomize
void Randomize(const uint32_t seed)
Randomize the generators.
Definition: RandomGenerators.h:446
mrpt::nav::RRTAlgorithmParams::minDistanceBetweenNewNodes
double minDistanceBetweenNewNodes
Minimum distance [meters] to nearest node to accept creating a new one (default=0....
Definition: PlannerRRT_common.h:125
filesystem.h
mrpt::nav::TPlannerInputTempl::goal_pose
node_pose_t goal_pose
Definition: PlannerRRT_common.h:32
mrpt::nav::TPlannerResultTempl::best_goal_node_id
mrpt::graphs::TNodeID best_goal_node_id
The ID of the best target node in the tree.
Definition: PlannerRRT_common.h:51
mrpt::nav::TPlannerInputTempl::world_bbox_min
world_limits_t world_bbox_min
Bounding box of the world, used to draw uniform random pose samples.
Definition: PlannerRRT_common.h:34
CConfigFile.h
mrpt::nav
Definition: CAbstractHolonomicReactiveMethod.h:23
mrpt::nav::RRTEndCriteria::minComputationTime
double minComputationTime
In seconds.
Definition: PlannerRRT_common.h:84
mrpt
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
Definition: CKalmanFilterCapable.h:30
mrpt::nav::RRTAlgorithmParams::goalBias
double goalBias
Probabily of picking the goal as random target (in [0,1], default=0.05)
Definition: PlannerRRT_common.h:118
mrpt::nav::PlannerTPS_VirtualBase::params
RRTAlgorithmParams params
Parameters specific to this path solver algorithm.
Definition: PlannerRRT_common.h:146
CDisplayWindow3D.h
mrpt::nav::TPlannerResultTempl::goal_distance
double goal_distance
Distance from best found path to goal.
Definition: PlannerRRT_common.h:47
mrpt::nav::TPlannerResultTempl::acceptable_goal_node_ids
std::set< mrpt::graphs::TNodeID > acceptable_goal_node_ids
The set of target nodes within an acceptable distance to target (including best_goal_node_id and othe...
Definition: PlannerRRT_common.h:54
random.h
main
int main()
Definition: vision_stereo_rectify/test.cpp:78
mrpt::nav::PlannerRRT_SE2_TPS::initialize
void initialize()
Must be called after setting all params (see loadConfig()) and before calling solve()
Definition: PlannerRRT_SE2_TPS.cpp:36
mrpt::nav::PlannerRRT_SE2_TPS::TPlannerResult
Definition: PlannerRRT_SE2_TPS.h:85
mrpt::nav::RRTAlgorithmParams::save_3d_log_freq
size_t save_3d_log_freq
Frequency (in iters) of saving tree state to debug log files viewable in SceneViewer3D (default=0,...
Definition: PlannerRRT_common.h:135
mrpt::io::CFileGZInputStream
Transparently opens a compressed "gz" file and reads uncompressed data from it.
Definition: io/CFileGZInputStream.h:26
win
mrpt::gui::CDisplayWindow3D::Ptr win
Definition: vision_stereo_rectify/test.cpp:31
mrpt::math::TPoint3D::x
double x
X,Y,Z coordinates.
Definition: lightweight_geom_data.h:385
mrpt::nav::TPlannerInputTempl::start_pose
node_pose_t start_pose
Definition: PlannerRRT_common.h:32
mrpt::maps::CPointsMap::boundingBox
void boundingBox(float &min_x, float &max_x, float &min_y, float &max_y, float &min_z, float &max_z) const
Computes the bounding box of all the points, or (0,0 ,0,0, 0,0) if there are no points.
Definition: CPointsMap.cpp:951
mrpt::maps::CSimpleMap::size
size_t size() const
Returns the count of pairs (pose,sensory data)
Definition: CSimpleMap.cpp:53
mrpt::math::TPose2D
Lightweight 2D pose.
Definition: lightweight_geom_data.h:186
mrpt::nav::TPlannerResultTempl::path_cost
double path_cost
Total cost of the best found path (cost ~~ Euclidean distance)
Definition: PlannerRRT_common.h:49
mrpt::nav::PlannerRRT_SE2_TPS
TP Space-based RRT path planning for SE(2) (planar) robots.
Definition: PlannerRRT_SE2_TPS.h:68
mrpt::math::TPoint2D
Lightweight 2D point.
Definition: lightweight_geom_data.h:42
mrpt::nav::TPlannerInputTempl::world_bbox_max
world_limits_t world_bbox_max
Definition: PlannerRRT_common.h:34
nav.h
mrpt::math::TPoint3D
Lightweight 3D point.
Definition: lightweight_geom_data.h:378
mrpt::nav::RRTEndCriteria::maxComputationTime
double maxComputationTime
In seconds.
Definition: PlannerRRT_common.h:81
mrpt::nav::TPlannerInputTempl::obstacles_points
mrpt::maps::CSimplePointsMap obstacles_points
World obstacles, as a point cloud.
Definition: PlannerRRT_common.h:36
mrpt::math::TPoint3D::y
double y
Definition: lightweight_geom_data.h:385
mrpt::serialization::archiveFrom
CArchiveStreamBase< STREAM > archiveFrom(STREAM &s)
Helper function to create a templatized wrapper CArchive object for a: MRPT's CStream,...
Definition: CArchive.h:561
mrpt::nav::RRTAlgorithmParams::minAngBetweenNewNodes
double minAngBetweenNewNodes
Minimum angle [rad] to nearest node to accept creating a new one (default=15 deg) (Any of minDistance...
Definition: PlannerRRT_common.h:129
mrpt::nav::RRTEndCriteria::acceptedDistToTarget
double acceptedDistToTarget
Maximum distance from a pose to target to accept it as a valid solution (meters).
Definition: PlannerRRT_common.h:74
mrpt::maps::CMetricMap::loadFromSimpleMap
void loadFromSimpleMap(const mrpt::maps::CSimpleMap &Map)
!This is an overloaded member function, provided for convenience. It differs from the above function ...
Definition: CMetricMap.h:110
myCfgFileName
string myCfgFileName(MRPT_EXAMPLES_BASE_DIRECTORY+string("../share/mrpt/config_files/navigation-ptgs/" "ptrrt_config_example1.ini"))
mrpt::config::CConfigFile
This class allows loading and storing values and vectors of different types from "....
Definition: config/CConfigFile.h:33
mrpt::maps::CSimpleMap
This class stores a sequence of <Probabilistic Pose,SensoryFrame> pairs, thus a "metric map" can be t...
Definition: CSimpleMap.h:35
mrpt::nav::PlannerRRT_SE2_TPS::TPlannerInput
Definition: PlannerRRT_SE2_TPS.h:74
mrpt::nav::RRTEndCriteria::acceptedAngToTarget
double acceptedAngToTarget
Maximum angle from a pose to target to accept it as a valid solution (rad).
Definition: PlannerRRT_common.h:78
CFileGZInputStream.h
mrpt::nav::PlannerRRT_SE2_TPS::solve
void solve(const TPlannerInput &pi, TPlannerResult &result)
The main API entry point: tries to find a planned path from 'goal' to 'target'.
Definition: PlannerRRT_SE2_TPS.cpp:45
mrpt::opengl::COpenGLScene::Ptr
std::shared_ptr< COpenGLScene > Ptr
Definition: COpenGLScene.h:61
mrpt::maps
Definition: CBeacon.h:24
mySimpleMap
string mySimpleMap(MRPT_EXAMPLES_BASE_DIRECTORY+string("../share/mrpt/datasets/malaga-cs-fac-building.simplemap.gz"))
mrpt::nav::PlannerRRT_SE2_TPS::loadConfig
void loadConfig(const mrpt::config::CConfigFileBase &cfgSource, const std::string &sSectionName=std::string("PTG_CONFIG"))
Load all params from a config file source.
Definition: PlannerRRT_SE2_TPS.cpp:28
CArchive.h
CSimpleMap.h
ASSERT_FILE_EXISTS_
#define ASSERT_FILE_EXISTS_(FIL)
Definition: filesystem.h:22
mrpt::nav::PlannerTPS_VirtualBase::renderMoveTree
void renderMoveTree(mrpt::opengl::COpenGLScene &scene, const TPlannerInputTempl< node_pose_t, world_limits_t > &pi, const TPlannerResultTempl< tree_t > &result, const TRenderPlannedPathOptions &options)
Definition: impl_renderMoveTree.h:25
mrpt::gui::CDisplayWindow3D
A graphical user interface (GUI) for efficiently rendering 3D scenes in real-time.
Definition: CDisplayWindow3D.h:117
TestRRT1
void TestRRT1()
Definition: vision_stereo_rectify/test.cpp:40
mrpt::nav::RRTAlgorithmParams::maxLength
double maxLength
(Very sensitive parameter!) Max length of each edge path (in meters, default=1.0)
Definition: PlannerRRT_common.h:121
mrpt::nav::PlannerTPS_VirtualBase::end_criteria
RRTEndCriteria end_criteria
Definition: PlannerRRT_common.h:144
mrpt::DEG2RAD
double DEG2RAD(const double x)
Degrees to radians.
Definition: core/include/mrpt/core/bits_math.h:42



Page generated by Doxygen 1.8.17 for MRPT 1.9.9 Git: ad3a9d8ae Tue May 1 23:10:22 2018 -0700 at miƩ 12 jul 2023 10:03:34 CEST