Add changes for 3dc96997da

This commit is contained in:
GitHub Action
2023-01-03 13:29:51 +00:00
parent a379f2f2aa
commit 08ac88dc5b
19 changed files with 686 additions and 6 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 KiB

View File

@@ -0,0 +1,294 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Mapping.point_cloud_sampling.point_cloud_sampling &mdash; PythonRobotics documentation</title>
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/plot_directive.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../../../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
<script src="../../../_static/jquery.js"></script>
<script src="../../../_static/underscore.js"></script>
<script src="../../../_static/doctools.js"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home"> PythonRobotics
<img src="../../../_static/icon.png" class="logo" alt="Logo"/>
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9612347954373886"
crossorigin="anonymous"></script>
<!-- PythonRoboticsDoc -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-9612347954373886"
data-ad-slot="1579532132"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../../getting_started.html">Getting Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../modules/introduction.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../modules/localization/localization.html">Localization</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../modules/mapping/mapping.html">Mapping</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../modules/slam/slam.html">SLAM</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../modules/path_planning/path_planning.html">Path Planning</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../modules/path_tracking/path_tracking.html">Path Tracking</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../modules/arm_navigation/arm_navigation.html">Arm Navigation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../modules/aerial_navigation/aerial_navigation.html">Aerial Navigation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../modules/bipedal/bipedal.html">Bipedal</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../modules/control/control.html">Control</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../modules/utils/utils.html">Utilities</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../modules/appendix/appendix.html">Appendix</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../how_to_contribute.html">How To Contribute</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">PythonRobotics</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
<li><a href="../../index.html">Module code</a> &raquo;</li>
<li>Mapping.point_cloud_sampling.point_cloud_sampling</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Source code for Mapping.point_cloud_sampling.point_cloud_sampling</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Point cloud sampling example codes. This code supports</span>
<span class="sd">- Voxel point sampling</span>
<span class="sd">- Farthest point sampling</span>
<span class="sd">- Poisson disk sampling</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">numpy.typing</span> <span class="k">as</span> <span class="nn">npt</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">defaultdict</span>
<span class="n">do_plot</span> <span class="o">=</span> <span class="kc">True</span>
<div class="viewcode-block" id="voxel_point_sampling"><a class="viewcode-back" href="../../../modules/mapping/point_cloud_sampling/point_cloud_sampling.html#Mapping.point_cloud_sampling.point_cloud_sampling.voxel_point_sampling">[docs]</a><span class="k">def</span> <span class="nf">voxel_point_sampling</span><span class="p">(</span><span class="n">original_points</span><span class="p">:</span> <span class="n">npt</span><span class="o">.</span><span class="n">NDArray</span><span class="p">,</span> <span class="n">voxel_size</span><span class="p">:</span> <span class="nb">float</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Voxel Point Sampling function.</span>
<span class="sd"> This function sample N-dimensional points with voxel grid.</span>
<span class="sd"> Points in a same voxel grid will be merged by mean operation for sampling.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> original_points : (M, N) N-dimensional points for sampling.</span>
<span class="sd"> The number of points is M.</span>
<span class="sd"> voxel_size : voxel grid size</span>
<span class="sd"> Returns</span>
<span class="sd"> -------</span>
<span class="sd"> sampled points (M&#39;, N)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">voxel_dict</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">original_points</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span>
<span class="n">xyz</span> <span class="o">=</span> <span class="n">original_points</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="p">:]</span>
<span class="n">xyz_index</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">xyz</span> <span class="o">//</span> <span class="n">voxel_size</span><span class="p">)</span>
<span class="n">voxel_dict</span><span class="p">[</span><span class="n">xyz_index</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">xyz</span><span class="p">)</span>
<span class="n">points</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">vstack</span><span class="p">([</span><span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">voxel_dict</span><span class="o">.</span><span class="n">values</span><span class="p">()])</span>
<span class="k">return</span> <span class="n">points</span></div>
<div class="viewcode-block" id="farthest_point_sampling"><a class="viewcode-back" href="../../../modules/mapping/point_cloud_sampling/point_cloud_sampling.html#Mapping.point_cloud_sampling.point_cloud_sampling.farthest_point_sampling">[docs]</a><span class="k">def</span> <span class="nf">farthest_point_sampling</span><span class="p">(</span><span class="n">orig_points</span><span class="p">:</span> <span class="n">npt</span><span class="o">.</span><span class="n">NDArray</span><span class="p">,</span>
<span class="n">n_points</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">seed</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Farthest point sampling function</span>
<span class="sd"> This function sample N-dimensional points with the farthest point policy.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> orig_points : (M, N) N-dimensional points for sampling.</span>
<span class="sd"> The number of points is M.</span>
<span class="sd"> n_points : number of points for sampling</span>
<span class="sd"> seed : random seed number</span>
<span class="sd"> Returns</span>
<span class="sd"> -------</span>
<span class="sd"> sampled points (n_points, N)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">rng</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">default_rng</span><span class="p">(</span><span class="n">seed</span><span class="p">)</span>
<span class="n">n_orig_points</span> <span class="o">=</span> <span class="n">orig_points</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">first_point_id</span> <span class="o">=</span> <span class="n">rng</span><span class="o">.</span><span class="n">choice</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="n">n_orig_points</span><span class="p">))</span>
<span class="n">min_distances</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">ones</span><span class="p">(</span><span class="n">n_orig_points</span><span class="p">)</span> <span class="o">*</span> <span class="nb">float</span><span class="p">(</span><span class="s2">&quot;inf&quot;</span><span class="p">)</span>
<span class="n">selected_ids</span> <span class="o">=</span> <span class="p">[</span><span class="n">first_point_id</span><span class="p">]</span>
<span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="n">selected_ids</span><span class="p">)</span> <span class="o">&lt;</span> <span class="n">n_points</span><span class="p">:</span>
<span class="n">base_point</span> <span class="o">=</span> <span class="n">orig_points</span><span class="p">[</span><span class="n">selected_ids</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="p">:]</span>
<span class="n">distances</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">norm</span><span class="p">(</span><span class="n">orig_points</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">,</span> <span class="p">:]</span> <span class="o">-</span> <span class="n">base_point</span><span class="p">,</span>
<span class="n">axis</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
<span class="n">min_distances</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">minimum</span><span class="p">(</span><span class="n">min_distances</span><span class="p">,</span> <span class="n">distances</span><span class="p">)</span>
<span class="n">distances_rank</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">argsort</span><span class="p">(</span><span class="o">-</span><span class="n">min_distances</span><span class="p">)</span> <span class="c1"># Farthest order</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">distances_rank</span><span class="p">:</span> <span class="c1"># From the farthest point</span>
<span class="k">if</span> <span class="n">i</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">selected_ids</span><span class="p">:</span> <span class="c1"># if not selected yes, select it</span>
<span class="n">selected_ids</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="k">break</span>
<span class="k">return</span> <span class="n">orig_points</span><span class="p">[</span><span class="n">selected_ids</span><span class="p">,</span> <span class="p">:]</span></div>
<div class="viewcode-block" id="poisson_disk_sampling"><a class="viewcode-back" href="../../../modules/mapping/point_cloud_sampling/point_cloud_sampling.html#Mapping.point_cloud_sampling.point_cloud_sampling.poisson_disk_sampling">[docs]</a><span class="k">def</span> <span class="nf">poisson_disk_sampling</span><span class="p">(</span><span class="n">orig_points</span><span class="p">:</span> <span class="n">npt</span><span class="o">.</span><span class="n">NDArray</span><span class="p">,</span> <span class="n">n_points</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span>
<span class="n">min_distance</span><span class="p">:</span> <span class="nb">float</span><span class="p">,</span> <span class="n">seed</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">MAX_ITER</span><span class="o">=</span><span class="mi">1000</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Poisson disk sampling function</span>
<span class="sd"> This function sample N-dimensional points randomly until the number of</span>
<span class="sd"> points keeping minimum distance between selected points.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> orig_points : (M, N) N-dimensional points for sampling.</span>
<span class="sd"> The number of points is M.</span>
<span class="sd"> n_points : number of points for sampling</span>
<span class="sd"> min_distance : minimum distance between selected points.</span>
<span class="sd"> seed : random seed number</span>
<span class="sd"> MAX_ITER : Maximum number of iteration. Default is 1000.</span>
<span class="sd"> Returns</span>
<span class="sd"> -------</span>
<span class="sd"> sampled points (n_points or less, N)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">rng</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">default_rng</span><span class="p">(</span><span class="n">seed</span><span class="p">)</span>
<span class="n">selected_id</span> <span class="o">=</span> <span class="n">rng</span><span class="o">.</span><span class="n">choice</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="n">orig_points</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
<span class="n">selected_ids</span> <span class="o">=</span> <span class="p">[</span><span class="n">selected_id</span><span class="p">]</span>
<span class="n">loop</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="n">selected_ids</span><span class="p">)</span> <span class="o">&lt;</span> <span class="n">n_points</span> <span class="ow">and</span> <span class="n">loop</span> <span class="o">&lt;=</span> <span class="n">MAX_ITER</span><span class="p">:</span>
<span class="n">selected_id</span> <span class="o">=</span> <span class="n">rng</span><span class="o">.</span><span class="n">choice</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="n">orig_points</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
<span class="n">base_point</span> <span class="o">=</span> <span class="n">orig_points</span><span class="p">[</span><span class="n">selected_id</span><span class="p">,</span> <span class="p">:]</span>
<span class="n">distances</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">norm</span><span class="p">(</span>
<span class="n">orig_points</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">,</span> <span class="n">selected_ids</span><span class="p">]</span> <span class="o">-</span> <span class="n">base_point</span><span class="p">,</span>
<span class="n">axis</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span><span class="o">.</span><span class="n">flatten</span><span class="p">()</span>
<span class="k">if</span> <span class="nb">min</span><span class="p">(</span><span class="n">distances</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="n">min_distance</span><span class="p">:</span>
<span class="n">selected_ids</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">selected_id</span><span class="p">)</span>
<span class="n">loop</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">selected_ids</span><span class="p">)</span> <span class="o">!=</span> <span class="n">n_points</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Could not find the specified number of points...&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">orig_points</span><span class="p">[</span><span class="n">selected_ids</span><span class="p">,</span> <span class="p">:]</span></div>
<span class="k">def</span> <span class="nf">plot_sampled_points</span><span class="p">(</span><span class="n">original_points</span><span class="p">,</span> <span class="n">sampled_points</span><span class="p">,</span> <span class="n">method_name</span><span class="p">):</span>
<span class="n">fig</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">()</span>
<span class="n">ax</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">add_subplot</span><span class="p">(</span><span class="n">projection</span><span class="o">=</span><span class="s1">&#39;3d&#39;</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">original_points</span><span class="p">[:,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">original_points</span><span class="p">[:,</span> <span class="mi">1</span><span class="p">],</span>
<span class="n">original_points</span><span class="p">[:,</span> <span class="mi">2</span><span class="p">],</span> <span class="n">marker</span><span class="o">=</span><span class="s2">&quot;.&quot;</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;Original points&quot;</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">sampled_points</span><span class="p">[:,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">sampled_points</span><span class="p">[:,</span> <span class="mi">1</span><span class="p">],</span>
<span class="n">sampled_points</span><span class="p">[:,</span> <span class="mi">2</span><span class="p">],</span> <span class="n">marker</span><span class="o">=</span><span class="s2">&quot;o&quot;</span><span class="p">,</span>
<span class="n">label</span><span class="o">=</span><span class="s2">&quot;Filtered points&quot;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="n">method_name</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">axis</span><span class="p">(</span><span class="s2">&quot;equal&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">main</span><span class="p">():</span>
<span class="n">n_points</span> <span class="o">=</span> <span class="mi">1000</span>
<span class="n">seed</span> <span class="o">=</span> <span class="mi">1234</span>
<span class="n">rng</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">default_rng</span><span class="p">(</span><span class="n">seed</span><span class="p">)</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">rng</span><span class="o">.</span><span class="n">normal</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">10.0</span><span class="p">,</span> <span class="n">n_points</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">rng</span><span class="o">.</span><span class="n">normal</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="n">n_points</span><span class="p">)</span>
<span class="n">z</span> <span class="o">=</span> <span class="n">rng</span><span class="o">.</span><span class="n">normal</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">10.0</span><span class="p">,</span> <span class="n">n_points</span><span class="p">)</span>
<span class="n">original_points</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">vstack</span><span class="p">((</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span><span class="p">))</span><span class="o">.</span><span class="n">T</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">original_points</span><span class="o">.</span><span class="n">shape</span><span class="si">=}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Voxel point sampling&quot;</span><span class="p">)</span>
<span class="n">voxel_size</span> <span class="o">=</span> <span class="mf">20.0</span>
<span class="n">voxel_sampling_points</span> <span class="o">=</span> <span class="n">voxel_point_sampling</span><span class="p">(</span><span class="n">original_points</span><span class="p">,</span> <span class="n">voxel_size</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">voxel_sampling_points</span><span class="o">.</span><span class="n">shape</span><span class="si">=}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Farthest point sampling&quot;</span><span class="p">)</span>
<span class="n">n_points</span> <span class="o">=</span> <span class="mi">20</span>
<span class="n">farthest_sampling_points</span> <span class="o">=</span> <span class="n">farthest_point_sampling</span><span class="p">(</span><span class="n">original_points</span><span class="p">,</span>
<span class="n">n_points</span><span class="p">,</span> <span class="n">seed</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">farthest_sampling_points</span><span class="o">.</span><span class="n">shape</span><span class="si">=}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Poisson disk sampling&quot;</span><span class="p">)</span>
<span class="n">n_points</span> <span class="o">=</span> <span class="mi">20</span>
<span class="n">min_distance</span> <span class="o">=</span> <span class="mf">10.0</span>
<span class="n">poisson_disk_points</span> <span class="o">=</span> <span class="n">poisson_disk_sampling</span><span class="p">(</span><span class="n">original_points</span><span class="p">,</span> <span class="n">n_points</span><span class="p">,</span>
<span class="n">min_distance</span><span class="p">,</span> <span class="n">seed</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">poisson_disk_points</span><span class="o">.</span><span class="n">shape</span><span class="si">=}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">do_plot</span><span class="p">:</span>
<span class="n">plot_sampled_points</span><span class="p">(</span><span class="n">original_points</span><span class="p">,</span> <span class="n">voxel_sampling_points</span><span class="p">,</span>
<span class="s2">&quot;Voxel point sampling&quot;</span><span class="p">)</span>
<span class="n">plot_sampled_points</span><span class="p">(</span><span class="n">original_points</span><span class="p">,</span> <span class="n">farthest_sampling_points</span><span class="p">,</span>
<span class="s2">&quot;Farthest point sampling&quot;</span><span class="p">)</span>
<span class="n">plot_sampled_points</span><span class="p">(</span><span class="n">original_points</span><span class="p">,</span> <span class="n">poisson_disk_points</span><span class="p">,</span>
<span class="s2">&quot;poisson disk sampling&quot;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
<span class="n">main</span><span class="p">()</span>
</pre></div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2018-2021, Atsushi Sakai.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -93,7 +93,8 @@
<div itemprop="articleBody">
<h1>All modules for which code is available</h1>
<ul><li><a href="PathPlanning/BSplinePath/bspline_path.html">PathPlanning.BSplinePath.bspline_path</a></li>
<ul><li><a href="Mapping/point_cloud_sampling/point_cloud_sampling.html">Mapping.point_cloud_sampling.point_cloud_sampling</a></li>
<li><a href="PathPlanning/BSplinePath/bspline_path.html">PathPlanning.BSplinePath.bspline_path</a></li>
<li><a href="PathPlanning/CubicSpline/cubic_spline_planner.html">PathPlanning.CubicSpline.cubic_spline_planner</a></li>
<li><a href="PathPlanning/DubinsPath/dubins_path_planner.html">PathPlanning.DubinsPath.dubins_path_planner</a></li>
<li><a href="utils/plot.html">utils.plot</a></li>

View File

@@ -9,6 +9,7 @@ Mapping
gaussian_grid_map/gaussian_grid_map
ray_casting_grid_map/ray_casting_grid_map
lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial
point_cloud_sampling/point_cloud_sampling
k_means_object_clustering/k_means_object_clustering
circle_fitting/circle_fitting
rectangle_fitting/rectangle_fitting

View File

@@ -0,0 +1,70 @@
.. _point_cloud_sampling:
Point cloud Sampling
----------------------
This sections explains point cloud sampling algorithms in PythonRobotics.
Point clouds are two-dimensional and three-dimensional based data
acquired by external sensors like LIDAR, cameras, etc.
In general, Point Cloud data is very large in number of data.
So, if you process all the data, computation time might become an issue.
Point cloud sampling is a technique for solving this computational complexity
issue by extracting only representative point data and thinning the point
cloud data without compromising the performance of processing using the point
cloud data.
Voxel Point Sampling
~~~~~~~~~~~~~~~~~~~~~~~~
.. figure:: voxel_point_sampling.png
Voxel grid sampling is a method of reducing point cloud data by using the
`Voxel grids <https://en.wikipedia.org/wiki/Voxel>`_ which is regular grids
in three-dimensional space.
This method determines which each point is in a grid, and replaces the point
clouds that are in the same Voxel with their average to reduce the number of
points.
API
=====
.. autofunction:: Mapping.point_cloud_sampling.point_cloud_sampling.voxel_point_sampling
Farthest Point Sampling
~~~~~~~~~~~~~~~~~~~~~~~~~
.. figure:: farthest_point_sampling.png
Farthest Point Sampling is a point cloud sampling method by a specified
number of points so that the distance between points is as far from as
possible.
This method is useful for machine learning and other situations where
you want to obtain a specified number of points from point cloud.
API
=====
.. autofunction:: Mapping.point_cloud_sampling.point_cloud_sampling.farthest_point_sampling
Poisson Disk Sampling
~~~~~~~~~~~~~~~~~~~~~~~~~
.. figure:: poisson_disk_sampling.png
Poisson disk sample is a point cloud sampling method by a specified
number of points so that the algorithm selects points where the distance
from selected points is greater than a certain distance.
Although this method does not have good performance comparing the Farthest
distance sample where each point is distributed farther from each other,
this is suitable for real-time processing because of its fast computation time.
API
=====
.. autofunction:: Mapping.point_cloud_sampling.point_cloud_sampling.poisson_disk_sampling

View File

@@ -99,8 +99,10 @@
<div class="genindex-jumpbox">
<a href="#A"><strong>A</strong></a>
| <a href="#C"><strong>C</strong></a>
| <a href="#F"><strong>F</strong></a>
| <a href="#I"><strong>I</strong></a>
| <a href="#P"><strong>P</strong></a>
| <a href="#V"><strong>V</strong></a>
</div>
<h2 id="A">A</h2>
@@ -137,6 +139,14 @@
</ul></td>
</tr></table>
<h2 id="F">F</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="modules/mapping/point_cloud_sampling/point_cloud_sampling.html#Mapping.point_cloud_sampling.point_cloud_sampling.farthest_point_sampling">farthest_point_sampling() (in module Mapping.point_cloud_sampling.point_cloud_sampling)</a>
</li>
</ul></td>
</tr></table>
<h2 id="I">I</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
@@ -153,6 +163,16 @@
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="modules/utils/plot/plot.html#utils.plot.plot_curvature">plot_curvature() (in module utils.plot)</a>
</li>
<li><a href="modules/mapping/point_cloud_sampling/point_cloud_sampling.html#Mapping.point_cloud_sampling.point_cloud_sampling.poisson_disk_sampling">poisson_disk_sampling() (in module Mapping.point_cloud_sampling.point_cloud_sampling)</a>
</li>
</ul></td>
</tr></table>
<h2 id="V">V</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="modules/mapping/point_cloud_sampling/point_cloud_sampling.html#Mapping.point_cloud_sampling.point_cloud_sampling.voxel_point_sampling">voxel_point_sampling() (in module Mapping.point_cloud_sampling.point_cloud_sampling)</a>
</li>
</ul></td>
</tr></table>

View File

@@ -141,6 +141,7 @@ algorithms</a> (<a class="reference external" href="https://github.com/AtsushiSa
<li class="toctree-l2"><a class="reference internal" href="modules/mapping/gaussian_grid_map/gaussian_grid_map.html">Gaussian grid map</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules/mapping/ray_casting_grid_map/ray_casting_grid_map.html">Ray casting grid map</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules/mapping/lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial.html">Lidar to grid map</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules/mapping/point_cloud_sampling/point_cloud_sampling.html">Point cloud Sampling</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules/mapping/k_means_object_clustering/k_means_object_clustering.html">k-means object clustering</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules/mapping/circle_fitting/circle_fitting.html">Object shape recognition using circle fitting</a></li>
<li class="toctree-l2"><a class="reference internal" href="modules/mapping/rectangle_fitting/rectangle_fitting.html">Object shape recognition using rectangle fitting</a></li>

View File

@@ -63,6 +63,7 @@
<li class="toctree-l2"><a class="reference internal" href="../gaussian_grid_map/gaussian_grid_map.html">Gaussian grid map</a></li>
<li class="toctree-l2"><a class="reference internal" href="../ray_casting_grid_map/ray_casting_grid_map.html">Ray casting grid map</a></li>
<li class="toctree-l2"><a class="reference internal" href="../lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial.html">Lidar to grid map</a></li>
<li class="toctree-l2"><a class="reference internal" href="../point_cloud_sampling/point_cloud_sampling.html">Point cloud Sampling</a></li>
<li class="toctree-l2"><a class="reference internal" href="../k_means_object_clustering/k_means_object_clustering.html">k-means object clustering</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Object shape recognition using circle fitting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../rectangle_fitting/rectangle_fitting.html">Object shape recognition using rectangle fitting</a></li>

View File

@@ -63,6 +63,7 @@
<li class="toctree-l2 current"><a class="current reference internal" href="#">Gaussian grid map</a></li>
<li class="toctree-l2"><a class="reference internal" href="../ray_casting_grid_map/ray_casting_grid_map.html">Ray casting grid map</a></li>
<li class="toctree-l2"><a class="reference internal" href="../lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial.html">Lidar to grid map</a></li>
<li class="toctree-l2"><a class="reference internal" href="../point_cloud_sampling/point_cloud_sampling.html">Point cloud Sampling</a></li>
<li class="toctree-l2"><a class="reference internal" href="../k_means_object_clustering/k_means_object_clustering.html">k-means object clustering</a></li>
<li class="toctree-l2"><a class="reference internal" href="../circle_fitting/circle_fitting.html">Object shape recognition using circle fitting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../rectangle_fitting/rectangle_fitting.html">Object shape recognition using rectangle fitting</a></li>

View File

@@ -21,7 +21,7 @@
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
<link rel="next" title="Object shape recognition using circle fitting" href="../circle_fitting/circle_fitting.html" />
<link rel="prev" title="Lidar to grid map" href="../lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial.html" />
<link rel="prev" title="Point cloud Sampling" href="../point_cloud_sampling/point_cloud_sampling.html" />
</head>
<body class="wy-body-for-nav">
@@ -63,6 +63,7 @@
<li class="toctree-l2"><a class="reference internal" href="../gaussian_grid_map/gaussian_grid_map.html">Gaussian grid map</a></li>
<li class="toctree-l2"><a class="reference internal" href="../ray_casting_grid_map/ray_casting_grid_map.html">Ray casting grid map</a></li>
<li class="toctree-l2"><a class="reference internal" href="../lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial.html">Lidar to grid map</a></li>
<li class="toctree-l2"><a class="reference internal" href="../point_cloud_sampling/point_cloud_sampling.html">Point cloud Sampling</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">k-means object clustering</a></li>
<li class="toctree-l2"><a class="reference internal" href="../circle_fitting/circle_fitting.html">Object shape recognition using circle fitting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../rectangle_fitting/rectangle_fitting.html">Object shape recognition using rectangle fitting</a></li>
@@ -115,7 +116,7 @@
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="../lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial.html" class="btn btn-neutral float-left" title="Lidar to grid map" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="../point_cloud_sampling/point_cloud_sampling.html" class="btn btn-neutral float-left" title="Point cloud Sampling" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="../circle_fitting/circle_fitting.html" class="btn btn-neutral float-right" title="Object shape recognition using circle fitting" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>

View File

@@ -20,7 +20,7 @@
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
<link rel="next" title="k-means object clustering" href="../k_means_object_clustering/k_means_object_clustering.html" />
<link rel="next" title="Point cloud Sampling" href="../point_cloud_sampling/point_cloud_sampling.html" />
<link rel="prev" title="Ray casting grid map" href="../ray_casting_grid_map/ray_casting_grid_map.html" />
</head>
@@ -63,6 +63,7 @@
<li class="toctree-l2"><a class="reference internal" href="../gaussian_grid_map/gaussian_grid_map.html">Gaussian grid map</a></li>
<li class="toctree-l2"><a class="reference internal" href="../ray_casting_grid_map/ray_casting_grid_map.html">Ray casting grid map</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Lidar to grid map</a></li>
<li class="toctree-l2"><a class="reference internal" href="../point_cloud_sampling/point_cloud_sampling.html">Point cloud Sampling</a></li>
<li class="toctree-l2"><a class="reference internal" href="../k_means_object_clustering/k_means_object_clustering.html">k-means object clustering</a></li>
<li class="toctree-l2"><a class="reference internal" href="../circle_fitting/circle_fitting.html">Object shape recognition using circle fitting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../rectangle_fitting/rectangle_fitting.html">Object shape recognition using rectangle fitting</a></li>
@@ -271,7 +272,7 @@ from a center point (e.g. (10, 20)) with zeros:</p>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="../ray_casting_grid_map/ray_casting_grid_map.html" class="btn btn-neutral float-left" title="Ray casting grid map" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="../k_means_object_clustering/k_means_object_clustering.html" class="btn btn-neutral float-right" title="k-means object clustering" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
<a href="../point_cloud_sampling/point_cloud_sampling.html" class="btn btn-neutral float-right" title="Point cloud Sampling" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>

View File

@@ -63,6 +63,7 @@
<li class="toctree-l2"><a class="reference internal" href="gaussian_grid_map/gaussian_grid_map.html">Gaussian grid map</a></li>
<li class="toctree-l2"><a class="reference internal" href="ray_casting_grid_map/ray_casting_grid_map.html">Ray casting grid map</a></li>
<li class="toctree-l2"><a class="reference internal" href="lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial.html">Lidar to grid map</a></li>
<li class="toctree-l2"><a class="reference internal" href="point_cloud_sampling/point_cloud_sampling.html">Point cloud Sampling</a></li>
<li class="toctree-l2"><a class="reference internal" href="k_means_object_clustering/k_means_object_clustering.html">k-means object clustering</a></li>
<li class="toctree-l2"><a class="reference internal" href="circle_fitting/circle_fitting.html">Object shape recognition using circle fitting</a></li>
<li class="toctree-l2"><a class="reference internal" href="rectangle_fitting/rectangle_fitting.html">Object shape recognition using rectangle fitting</a></li>
@@ -112,6 +113,12 @@
<li class="toctree-l1"><a class="reference internal" href="gaussian_grid_map/gaussian_grid_map.html">Gaussian grid map</a></li>
<li class="toctree-l1"><a class="reference internal" href="ray_casting_grid_map/ray_casting_grid_map.html">Ray casting grid map</a></li>
<li class="toctree-l1"><a class="reference internal" href="lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial.html">Lidar to grid map</a></li>
<li class="toctree-l1"><a class="reference internal" href="point_cloud_sampling/point_cloud_sampling.html">Point cloud Sampling</a><ul>
<li class="toctree-l2"><a class="reference internal" href="point_cloud_sampling/point_cloud_sampling.html#voxel-point-sampling">Voxel Point Sampling</a></li>
<li class="toctree-l2"><a class="reference internal" href="point_cloud_sampling/point_cloud_sampling.html#farthest-point-sampling">Farthest Point Sampling</a></li>
<li class="toctree-l2"><a class="reference internal" href="point_cloud_sampling/point_cloud_sampling.html#poisson-disk-sampling">Poisson Disk Sampling</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="k_means_object_clustering/k_means_object_clustering.html">k-means object clustering</a></li>
<li class="toctree-l1"><a class="reference internal" href="circle_fitting/circle_fitting.html">Object shape recognition using circle fitting</a></li>
<li class="toctree-l1"><a class="reference internal" href="rectangle_fitting/rectangle_fitting.html">Object shape recognition using rectangle fitting</a></li>

View File

@@ -0,0 +1,280 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Point cloud Sampling &mdash; PythonRobotics documentation</title>
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/plot_directive.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../../../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
<script src="../../../_static/jquery.js"></script>
<script src="../../../_static/underscore.js"></script>
<script src="../../../_static/doctools.js"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
<link rel="next" title="k-means object clustering" href="../k_means_object_clustering/k_means_object_clustering.html" />
<link rel="prev" title="Lidar to grid map" href="../lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home"> PythonRobotics
<img src="../../../_static/icon.png" class="logo" alt="Logo"/>
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9612347954373886"
crossorigin="anonymous"></script>
<!-- PythonRoboticsDoc -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-9612347954373886"
data-ad-slot="1579532132"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../../getting_started.html">Getting Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../introduction.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../localization/localization.html">Localization</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../mapping.html">Mapping</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../gaussian_grid_map/gaussian_grid_map.html">Gaussian grid map</a></li>
<li class="toctree-l2"><a class="reference internal" href="../ray_casting_grid_map/ray_casting_grid_map.html">Ray casting grid map</a></li>
<li class="toctree-l2"><a class="reference internal" href="../lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial.html">Lidar to grid map</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Point cloud Sampling</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#voxel-point-sampling">Voxel Point Sampling</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#api">API</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#farthest-point-sampling">Farthest Point Sampling</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#id2">API</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#poisson-disk-sampling">Poisson Disk Sampling</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#id3">API</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../k_means_object_clustering/k_means_object_clustering.html">k-means object clustering</a></li>
<li class="toctree-l2"><a class="reference internal" href="../circle_fitting/circle_fitting.html">Object shape recognition using circle fitting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../rectangle_fitting/rectangle_fitting.html">Object shape recognition using rectangle fitting</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../slam/slam.html">SLAM</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../path_planning/path_planning.html">Path Planning</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../path_tracking/path_tracking.html">Path Tracking</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../arm_navigation/arm_navigation.html">Arm Navigation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../aerial_navigation/aerial_navigation.html">Aerial Navigation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../bipedal/bipedal.html">Bipedal</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../control/control.html">Control</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../utils/utils.html">Utilities</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../appendix/appendix.html">Appendix</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../how_to_contribute.html">How To Contribute</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">PythonRobotics</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
<li><a href="../mapping.html">Mapping</a> &raquo;</li>
<li>Point cloud Sampling</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/AtsushiSakai/PythonRobotics/blob/master/docs/modules/mapping/point_cloud_sampling/point_cloud_sampling_main.rst" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="point-cloud-sampling">
<span id="id1"></span><h1>Point cloud Sampling<a class="headerlink" href="#point-cloud-sampling" title="Permalink to this headline"></a></h1>
<p>This sections explains point cloud sampling algorithms in PythonRobotics.</p>
<p>Point clouds are two-dimensional and three-dimensional based data
acquired by external sensors like LIDAR, cameras, etc.
In general, Point Cloud data is very large in number of data.
So, if you process all the data, computation time might become an issue.</p>
<p>Point cloud sampling is a technique for solving this computational complexity
issue by extracting only representative point data and thinning the point
cloud data without compromising the performance of processing using the point
cloud data.</p>
<section id="voxel-point-sampling">
<h2>Voxel Point Sampling<a class="headerlink" href="#voxel-point-sampling" title="Permalink to this headline"></a></h2>
<figure class="align-default">
<img alt="../../../_images/voxel_point_sampling.png" src="../../../_images/voxel_point_sampling.png" />
</figure>
<p>Voxel grid sampling is a method of reducing point cloud data by using the
<a class="reference external" href="https://en.wikipedia.org/wiki/Voxel">Voxel grids</a> which is regular grids
in three-dimensional space.</p>
<p>This method determines which each point is in a grid, and replaces the point
clouds that are in the same Voxel with their average to reduce the number of
points.</p>
<section id="api">
<h3>API<a class="headerlink" href="#api" title="Permalink to this headline"></a></h3>
<dl class="py function">
<dt class="sig sig-object py" id="Mapping.point_cloud_sampling.point_cloud_sampling.voxel_point_sampling">
<span class="sig-prename descclassname"><span class="pre">Mapping.point_cloud_sampling.point_cloud_sampling.</span></span><span class="sig-name descname"><span class="pre">voxel_point_sampling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">original_points</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">numpy.ndarray</span><span class="p"><span class="pre">[</span></span><span class="pre">Any</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">numpy.dtype</span><span class="p"><span class="pre">[</span></span><span class="pre">numpy._typing._generic_alias.ScalarType</span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">voxel_size</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">float</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../../_modules/Mapping/point_cloud_sampling/point_cloud_sampling.html#voxel_point_sampling"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#Mapping.point_cloud_sampling.point_cloud_sampling.voxel_point_sampling" title="Permalink to this definition"></a></dt>
<dd><p>Voxel Point Sampling function.
This function sample N-dimensional points with voxel grid.
Points in a same voxel grid will be merged by mean operation for sampling.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>original_points</strong> (<em>(</em><em>M</em><em>, </em><em>N</em><em>) </em><em>N-dimensional points for sampling.</em>) The number of points is M.</p></li>
<li><p><strong>voxel_size</strong> (<em>voxel grid size</em>) </p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p></p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>sampled points (M, N)</p>
</dd>
</dl>
</dd></dl>
</section>
</section>
<section id="farthest-point-sampling">
<h2>Farthest Point Sampling<a class="headerlink" href="#farthest-point-sampling" title="Permalink to this headline"></a></h2>
<figure class="align-default">
<img alt="../../../_images/farthest_point_sampling.png" src="../../../_images/farthest_point_sampling.png" />
</figure>
<p>Farthest Point Sampling is a point cloud sampling method by a specified
number of points so that the distance between points is as far from as
possible.</p>
<p>This method is useful for machine learning and other situations where
you want to obtain a specified number of points from point cloud.</p>
<section id="id2">
<h3>API<a class="headerlink" href="#id2" title="Permalink to this headline"></a></h3>
<dl class="py function">
<dt class="sig sig-object py" id="Mapping.point_cloud_sampling.point_cloud_sampling.farthest_point_sampling">
<span class="sig-prename descclassname"><span class="pre">Mapping.point_cloud_sampling.point_cloud_sampling.</span></span><span class="sig-name descname"><span class="pre">farthest_point_sampling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">orig_points</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">numpy.ndarray</span><span class="p"><span class="pre">[</span></span><span class="pre">Any</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">numpy.dtype</span><span class="p"><span class="pre">[</span></span><span class="pre">numpy._typing._generic_alias.ScalarType</span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_points</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">seed</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../../_modules/Mapping/point_cloud_sampling/point_cloud_sampling.html#farthest_point_sampling"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#Mapping.point_cloud_sampling.point_cloud_sampling.farthest_point_sampling" title="Permalink to this definition"></a></dt>
<dd><p>Farthest point sampling function
This function sample N-dimensional points with the farthest point policy.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>orig_points</strong> (<em>(</em><em>M</em><em>, </em><em>N</em><em>) </em><em>N-dimensional points for sampling.</em>) The number of points is M.</p></li>
<li><p><strong>n_points</strong> (<em>number of points for sampling</em>) </p></li>
<li><p><strong>seed</strong> (<em>random seed number</em>) </p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p></p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>sampled points (n_points, N)</p>
</dd>
</dl>
</dd></dl>
</section>
</section>
<section id="poisson-disk-sampling">
<h2>Poisson Disk Sampling<a class="headerlink" href="#poisson-disk-sampling" title="Permalink to this headline"></a></h2>
<figure class="align-default">
<img alt="../../../_images/poisson_disk_sampling.png" src="../../../_images/poisson_disk_sampling.png" />
</figure>
<p>Poisson disk sample is a point cloud sampling method by a specified
number of points so that the algorithm selects points where the distance
from selected points is greater than a certain distance.</p>
<p>Although this method does not have good performance comparing the Farthest
distance sample where each point is distributed farther from each other,
this is suitable for real-time processing because of its fast computation time.</p>
<section id="id3">
<h3>API<a class="headerlink" href="#id3" title="Permalink to this headline"></a></h3>
<dl class="py function">
<dt class="sig sig-object py" id="Mapping.point_cloud_sampling.point_cloud_sampling.poisson_disk_sampling">
<span class="sig-prename descclassname"><span class="pre">Mapping.point_cloud_sampling.point_cloud_sampling.</span></span><span class="sig-name descname"><span class="pre">poisson_disk_sampling</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">orig_points</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">numpy.ndarray</span><span class="p"><span class="pre">[</span></span><span class="pre">Any</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">numpy.dtype</span><span class="p"><span class="pre">[</span></span><span class="pre">numpy._typing._generic_alias.ScalarType</span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_points</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">min_distance</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">float</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">seed</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">MAX_ITER</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">1000</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../../_modules/Mapping/point_cloud_sampling/point_cloud_sampling.html#poisson_disk_sampling"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#Mapping.point_cloud_sampling.point_cloud_sampling.poisson_disk_sampling" title="Permalink to this definition"></a></dt>
<dd><p>Poisson disk sampling function
This function sample N-dimensional points randomly until the number of
points keeping minimum distance between selected points.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>orig_points</strong> (<em>(</em><em>M</em><em>, </em><em>N</em><em>) </em><em>N-dimensional points for sampling.</em>) The number of points is M.</p></li>
<li><p><strong>n_points</strong> (<em>number of points for sampling</em>) </p></li>
<li><p><strong>min_distance</strong> (<em>minimum distance between selected points.</em>) </p></li>
<li><p><strong>seed</strong> (<em>random seed number</em>) </p></li>
<li><p><strong>MAX_ITER</strong> (<em>Maximum number of iteration. Default is 1000.</em>) </p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p></p>
</dd>
<dt class="field-odd">Return type</dt>
<dd class="field-odd"><p>sampled points (n_points or less, N)</p>
</dd>
</dl>
</dd></dl>
</section>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="../lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial.html" class="btn btn-neutral float-left" title="Lidar to grid map" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="../k_means_object_clustering/k_means_object_clustering.html" class="btn btn-neutral float-right" title="k-means object clustering" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2018-2021, Atsushi Sakai.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -63,6 +63,7 @@
<li class="toctree-l2"><a class="reference internal" href="../gaussian_grid_map/gaussian_grid_map.html">Gaussian grid map</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Ray casting grid map</a></li>
<li class="toctree-l2"><a class="reference internal" href="../lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial.html">Lidar to grid map</a></li>
<li class="toctree-l2"><a class="reference internal" href="../point_cloud_sampling/point_cloud_sampling.html">Point cloud Sampling</a></li>
<li class="toctree-l2"><a class="reference internal" href="../k_means_object_clustering/k_means_object_clustering.html">k-means object clustering</a></li>
<li class="toctree-l2"><a class="reference internal" href="../circle_fitting/circle_fitting.html">Object shape recognition using circle fitting</a></li>
<li class="toctree-l2"><a class="reference internal" href="../rectangle_fitting/rectangle_fitting.html">Object shape recognition using rectangle fitting</a></li>

View File

@@ -63,6 +63,7 @@
<li class="toctree-l2"><a class="reference internal" href="../gaussian_grid_map/gaussian_grid_map.html">Gaussian grid map</a></li>
<li class="toctree-l2"><a class="reference internal" href="../ray_casting_grid_map/ray_casting_grid_map.html">Ray casting grid map</a></li>
<li class="toctree-l2"><a class="reference internal" href="../lidar_to_grid_map_tutorial/lidar_to_grid_map_tutorial.html">Lidar to grid map</a></li>
<li class="toctree-l2"><a class="reference internal" href="../point_cloud_sampling/point_cloud_sampling.html">Point cloud Sampling</a></li>
<li class="toctree-l2"><a class="reference internal" href="../k_means_object_clustering/k_means_object_clustering.html">k-means object clustering</a></li>
<li class="toctree-l2"><a class="reference internal" href="../circle_fitting/circle_fitting.html">Object shape recognition using circle fitting</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Object shape recognition using rectangle fitting</a></li>

Binary file not shown.

File diff suppressed because one or more lines are too long