-
Notifications
You must be signed in to change notification settings - Fork 0
/
local-search.xml
109 lines (52 loc) · 91.6 KB
/
local-search.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>基于realsense相机和rtabmap_ros的SLAM建图与重定位</title>
<link href="/2024/08/06/%E5%9F%BA%E4%BA%8Erealsense%E7%9B%B8%E6%9C%BA%E5%92%8Crtabmap-ros%E7%9A%84SLAM%E5%BB%BA%E5%9B%BE%E4%B8%8E%E9%87%8D%E5%AE%9A%E4%BD%8D/"/>
<url>/2024/08/06/%E5%9F%BA%E4%BA%8Erealsense%E7%9B%B8%E6%9C%BA%E5%92%8Crtabmap-ros%E7%9A%84SLAM%E5%BB%BA%E5%9B%BE%E4%B8%8E%E9%87%8D%E5%AE%9A%E4%BD%8D/</url>
<content type="html"><![CDATA[<h1 id="基于realsense相机和rtabmap-ros的SLAM建图与重定位"><a href="#基于realsense相机和rtabmap-ros的SLAM建图与重定位" class="headerlink" title="基于realsense相机和rtabmap_ros的SLAM建图与重定位"></a>基于realsense相机和rtabmap_ros的SLAM建图与重定位</h1><p>地图和定位对于可以动作的设备来说十分重要,对一些移动平台来讲也是如此,现研究采用视觉传感器进行SLAM建图 </p><h2 id="硬件"><a href="#硬件" class="headerlink" title="硬件"></a>硬件</h2><p>D435i为realsense相机中十分经典的一款,双目+RGB+IMU的传感器配置,给他提供了丰富的传感器信息。 </p><span id="more"></span><p>T265相机是配备了双目鱼眼+IMU的相机,内置有Intel自己的微处理器,作为视觉里程计。目前已经停止了许多软件支持。 </p><h2 id="软件"><a href="#软件" class="headerlink" title="软件"></a>软件</h2><p>在ROS中使用,考虑了ORB_SLAM和RTABMAP </p><h3 id="ORB-SLAM"><a href="#ORB-SLAM" class="headerlink" title="ORB_SLAM"></a>ORB_SLAM</h3><p>由于ORB_SLAM的功能过于匮乏,保存载入的功能需要自己MOD。在Github上找到了高翔他们的点云MOD版本,但是生成的点云方向需要调整,而且对地面的过滤算法需要自己来写,也有尝试转成OctoMap地图,然后投影到地面的方案,但是由于点云的地面不平、倾斜较大,放弃了这个方案。<br>虽然定位较为稳定,但是因为地图导出困难,保存和加载功能需要自己MOD </p><h3 id="RTAB-MAP"><a href="#RTAB-MAP" class="headerlink" title="RTAB_MAP"></a>RTAB_MAP</h3><p>RTAB_MAP可以接收视觉,2D激光和3D激光多种信息,进行建图保存、加载、定位,其功能较为完善,使用的tutorial也相对较多,缺点是性能开销较大,但是可以通过关闭3D显示相关的功能来缓解,或者直接使用RVIZ来可视化,另外其参数调整的空间也很大,比较适合建图重定位。 </p><h1 id="安装和调试"><a href="#安装和调试" class="headerlink" title="安装和调试"></a>安装和调试</h1><p>本次软件使用采用了UBuntu18.04的版本,因此也对硬件的型号有一定要求,过于新的网卡显卡甚至是触摸板都是需要自己额外打驱动上去的,建议使用</p><h2 id="RealsenseSDK"><a href="#RealsenseSDK" class="headerlink" title="RealsenseSDK"></a>RealsenseSDK</h2><p>由于Intel官方在新的版本中放弃了对T265等老旧设备的支持,因此选择安装SDK为2.50版本。<br>依照官方文档的<a href="https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages">操作</a><br>下载对应的公钥</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">sudo <span class="hljs-built_in">mkdir</span> -p /etc/apt/keyrings<br>curl -sSf https://librealsense.intel.com/Debian/librealsense.pgp | sudo <span class="hljs-built_in">tee</span> /etc/apt/keyrings/librealsense.pgp > /dev/null<br></code></pre></td></tr></table></figure><p>随后添加到列表</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">echo</span> <span class="hljs-string">"deb [signed-by=/etc/apt/keyrings/librealsense.pgp] https://librealsense.intel.com/Debian/apt-repo `lsb_release -cs` main"</span> | \<br>sudo <span class="hljs-built_in">tee</span> /etc/apt/sources.list.d/librealsense.list<br>sudo apt-get update<br></code></pre></td></tr></table></figure><p>然后就可以安装了<br>**注意:**<em>安装全程请拔出相机。接下来的步骤需要查询并输入对应版本号,请直接从查询结果里复制,或者使用tab进行补全,本文的内容经过验证,但是文章输入难免有错误,请见谅。按照顺序进行,一旦有报错,请使用<code>sudo apt --fix-broken install</code>解决之后再进行下一步安装</em><br>使用<code>apt list -a librealsense2-dkms</code> 或者 <code>apt-cache madison librealsense2-dkms</code> 来查询软件包的版本<br>依次安装udev-rules dkms 和其他的软件包</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">sudo apt-get install librealsense2-udev-rules:amd64=2.50.0-0~realsense0.6127<br>sudo apt-get install librealsense2-dkms=1.3.13-0ubuntu1<br></code></pre></td></tr></table></figure><p>再安装其他的utils</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash">sudo apt-get insall librealsense2=2.50.0-0~realsense0.6127<br>sudo apt-get insall librealsense2-gl=2.50.0-0~realsense0.6127<br>sudo apt-get insall librealsense2-net=2.50.0-0~realsense0.6127<br>sudo apt-get insall librealsense2-utils=2.50.0-0~realsense0.6127<br>sudo apt-get insall librealsense2-dev=2.50.0-0~realsense0.6127<br>sudo apt-get insall librealsense2-dbg=2.50.0-0~realsense0.6127<br></code></pre></td></tr></table></figure><p>安装完成后直接在控制台输入<code>realsense-viewer</code>打开软件,接入摄像头即可查看不同传感器的数据,还可以在3D页面预览深度效果 </p><h2 id="RTAB-MAP-1"><a href="#RTAB-MAP-1" class="headerlink" title="RTAB-MAP"></a>RTAB-MAP</h2><h3 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h3><p>直接参照RTABMAP_ROS <a href="https://github.com/introlab/rtabmap_ros#rtabmap_ros">wiki 页面</a> </p><h3 id="建图"><a href="#建图" class="headerlink" title="建图"></a>建图</h3><p>查看rtabmap_ros的launch文件可以发现,每次启动的时候都需要去指定订阅的话题,以及一部分ros相关的参数,例如是否启动rviz,深度是否和RGB对齐等相关参数,具体的内容如下 </p><h4 id="如果只使用D435-D415"><a href="#如果只使用D435-D415" class="headerlink" title="如果只使用D435/D415"></a><strong>如果只使用D435/D415</strong></h4><p>首先是启动realsenseros节点,其中的参数就是指把RGB和深度进行对齐,这样会多输出一个对齐后的topic</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">roslaunch realsense2_camera rs_camera.launch align_depth:=<span class="hljs-literal">true</span><br></code></pre></td></tr></table></figure><p>这个launch文件不会启用相机内的IMU功能,把相机当做纯RGBD相机使用,因此接下来使用RTABMAP时,需要启用视觉里程计算法。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash">roslaunch rtabmap_launch rtabmap.launch \<br> rtabmap_args:=<span class="hljs-string">"--delete_db_on_start"</span> \<br> depth_topic:=/camera/aligned_depth_to_color/image_raw \<br> rgb_topic:=/camera/color/image_raw \<br> camera_info_topic:=/camera/color/camera_info \<br> approx_sync:=<span class="hljs-literal">false</span><br></code></pre></td></tr></table></figure><p>建议测试完成后直接修改对应的launch文件,直接包含两个launch文件并修改参数,直接一键启动<br>参数的功能直接去看rtabmap_ros的.launch和他们的wiki,注释写的很详细</p><h4 id="启动D435i-L515的IMU"><a href="#启动D435i-L515的IMU" class="headerlink" title="启动D435i/L515的IMU"></a>启动D435i/L515的IMU</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash">roslaunch realsense2_camera rs_camera.launch \<br> align_depth:=<span class="hljs-literal">true</span> \<br> unite_imu_method:=<span class="hljs-string">"linear_interpolation"</span> \<br> enable_gyro:=<span class="hljs-literal">true</span> \<br> enable_accel:=<span class="hljs-literal">true</span><br></code></pre></td></tr></table></figure><p>为了把IMU数据转换成rtabmap可以订阅的格式,我们使用另外一个节点</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash">rosrun imu_filter_madgwick imu_filter_node \<br> _use_mag:=<span class="hljs-literal">false</span> \<br> _publish_tf:=<span class="hljs-literal">false</span> \<br> _world_frame:=<span class="hljs-string">"enu"</span> \<br> /imu/data_raw:=/camera/imu \<br> /imu/data:=/rtabmap/imu<br></code></pre></td></tr></table></figure><p>随后启动rtabmap建图</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs bash">rtabmap_args:=<span class="hljs-string">"--delete_db_on_start --Optimizer/GravitySigma 0.3"</span> \<br> depth_topic:=/camera/aligned_depth_to_color/image_raw \<br> rgb_topic:=/camera/color/image_raw \<br> camera_info_topic:=/camera/color/camera_info \<br> approx_sync:=<span class="hljs-literal">false</span> \<br> wait_imu_to_init:=<span class="hljs-literal">true</span> \<br> imu_topic:=/rtabmap/imu<br></code></pre></td></tr></table></figure><h4 id="使用D400-L515-T265外置里程计"><a href="#使用D400-L515-T265外置里程计" class="headerlink" title="使用D400/L515+T265外置里程计"></a>使用D400/L515+T265外置里程计</h4><p>realsense内置了对应的launch文件,<strong>请注意:</strong><em>在使用launch文件之前,请使用rs_camera.launch单独打开每一个设备,在控制台的log中查看相机的SN,然后将对应的SN填入launch文件的arg中</em><br><strong>请确保使用了官方的3D打印支架,如果二者之间的几何关系发生改变,请编辑launch文件中的TFNode启动参数,从而确保相机坐标转换的正确</strong></p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">roslaunch realsense2_camera rs_d400_and_t265.launch<br></code></pre></td></tr></table></figure><p>由于T265会自己计算里程计,因此不再需要启用视觉里程计算法</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><code class="hljs bash">roslaunch rtabmap_launch rtabmap.launch \<br> args:=<span class="hljs-string">"-d --Mem/UseOdomGravity true --Optimizer/GravitySigma 0.3"</span> \<br> odom_topic:=/t265/odom/sample \<br> frame_id:=t265_link \<br> rgbd_sync:=<span class="hljs-literal">true</span> \<br> depth_topic:=/d400/aligned_depth_to_color/image_raw \<br> rgb_topic:=/d400/color/image_raw \<br> camera_info_topic:=/d400/color/camera_info \<br> approx_rgbd_sync:=<span class="hljs-literal">false</span> \<br> visual_odometry:=<span class="hljs-literal">false</span> \<br> queue_size:=30<br></code></pre></td></tr></table></figure><p>你可以编写自己的launch文件,把上述需要更改的参数都丢进去,甚至可以参照rtabmap官方的ini文件,更改mapping的各种参数,然后启动的时候自动加载<br>例如下方的launch文件,参考rtabmap官方的launch文件,知道载入一个.ini文件既可以设定好mapping的参数,所以参照了rtabmap修改参数apply时控制台的输出,添加对应参数到.ini的[Core]下即可</p><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><code class="hljs xml"><span class="hljs-tag"><<span class="hljs-name">launch</span>></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"device_type_camera1"</span> <span class="hljs-attr">default</span>=<span class="hljs-string">"t265"</span>/></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"device_type_camera2"</span> <span class="hljs-attr">default</span>=<span class="hljs-string">"d435"</span>/></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"serial_no_camera1"</span> <span class="hljs-attr">default</span>=<span class="hljs-string">""</span>/></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"serial_no_camera2"</span> <span class="hljs-attr">default</span>=<span class="hljs-string">""</span>/></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"camera1"</span> <span class="hljs-attr">default</span>=<span class="hljs-string">"t265"</span>/></span><span class="hljs-comment"><!-- <span class="hljs-doctag">Note:</span> Replace with camera name --></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"camera2"</span> <span class="hljs-attr">default</span>=<span class="hljs-string">"d400"</span>/></span><span class="hljs-comment"><!-- <span class="hljs-doctag">Note:</span> Replace with camera name --></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"clip_distance"</span> <span class="hljs-attr">default</span>=<span class="hljs-string">"-2"</span>/></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"use_rviz"</span> <span class="hljs-attr">default</span>=<span class="hljs-string">"true"</span>/></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"use_rtabmapviz"</span> <span class="hljs-attr">default</span>=<span class="hljs-string">"true"</span>/></span><br> <br><br> <span class="hljs-tag"><<span class="hljs-name">include</span> <span class="hljs-attr">file</span>=<span class="hljs-string">"$(find realsense2_camera)/launch/rs_d400_and_t265.launch"</span>></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"device_type_camera1"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"$(arg device_type_camera1)"</span>/></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"device_type_camera2"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"$(arg device_type_camera2)"</span>/></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"serial_no_camera1"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"$(arg serial_no_camera1)"</span>/></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"serial_no_camera2"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"$(arg serial_no_camera2)"</span>/></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"camera1"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"$(arg camera1)"</span>/></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"camera2"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"$(arg camera2)"</span>/></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"clip_distance"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"$(arg clip_distance)"</span>/></span><br> <br> <span class="hljs-tag"></<span class="hljs-name">include</span>></span><br><br> <span class="hljs-tag"><<span class="hljs-name">include</span> <span class="hljs-attr">file</span>=<span class="hljs-string">"$(find rtabmap_ros)/launch/rtabmap.launch"</span>></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"rtabmap_args"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"--delete_db_on_start"</span>/></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"depth_topic"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"/$(arg camera2)/aligned_depth_to_color/image_raw"</span>/></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"frame_id"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"$(arg camera2)_link"</span>/></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"cfg"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"$(find realsense2_camera)/launch/cfg/slam.ini"</span>/></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"visual_odometry"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"false"</span>/></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"odom_topic"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"/$(arg camera1)/odom/sample"</span>/></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"rgb_topic"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"/$(arg camera2)/color/image_raw"</span>/></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"camera_info_topic"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"/$(arg camera2)/color/camera_info"</span>/></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"queue_size"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"200"</span>/></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"rviz"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"$(arg use_rviz)"</span>/></span><br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"rtabmapviz"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"$(arg use_rtabmapviz)"</span>/></span><br> <span class="hljs-tag"></<span class="hljs-name">include</span>></span><br><span class="hljs-tag"></<span class="hljs-name">launch</span>></span><br></code></pre></td></tr></table></figure><p>随后是.ini文件</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br></pre></td><td class="code"><pre><code class="hljs ini"><span class="hljs-section">[Core]</span><br><span class="hljs-attr">Version</span> = <span class="hljs-number">0.20</span>.<span class="hljs-number">23</span><br>BRIEF\<span class="hljs-attr">Bytes</span> = <span class="hljs-number">32</span><br>BRISK\<span class="hljs-attr">Octaves</span> = <span class="hljs-number">3</span><br>BRISK\<span class="hljs-attr">PatternScale</span> = <span class="hljs-number">1</span><br>BRISK\<span class="hljs-attr">Thresh</span> = <span class="hljs-number">30</span><br>Bayes\<span class="hljs-attr">FullPredictionUpdate</span> = <span class="hljs-literal">false</span><br>Bayes\<span class="hljs-attr">PredictionLC</span> = <span class="hljs-number">0.1</span> <span class="hljs-number">0.36</span> <span class="hljs-number">0.30</span> <span class="hljs-number">0.16</span> <span class="hljs-number">0.062</span> <span class="hljs-number">0.0151</span> <span class="hljs-number">0.00255</span> <span class="hljs-number">0.000324</span> <span class="hljs-number">2.5</span>e-<span class="hljs-number">05</span> <span class="hljs-number">1.3</span>e-<span class="hljs-number">06</span> <span class="hljs-number">4.8</span>e-<span class="hljs-number">08</span> <span class="hljs-number">1.2</span>e-<span class="hljs-number">09</span> <span class="hljs-number">1.9</span>e-<span class="hljs-number">11</span> <span class="hljs-number">2.2</span>e-<span class="hljs-number">13</span> <span class="hljs-number">1.7</span>e-<span class="hljs-number">15</span> <span class="hljs-number">8.5</span>e-<span class="hljs-number">18</span> <span class="hljs-number">2.9</span>e-<span class="hljs-number">20</span> <span class="hljs-number">6.9</span>e-<span class="hljs-number">23</span><br>Bayes\<span class="hljs-attr">VirtualPlacePriorThr</span> = <span class="hljs-number">0.9</span><br>Db\<span class="hljs-attr">TargetVersion</span> = <br>DbSqlite3\<span class="hljs-attr">CacheSize</span> = <span class="hljs-number">10000</span><br>DbSqlite3\<span class="hljs-attr">InMemory</span> = <span class="hljs-literal">false</span><br>DbSqlite3\<span class="hljs-attr">JournalMode</span> = <span class="hljs-number">3</span><br>DbSqlite3\<span class="hljs-attr">Synchronous</span> = <span class="hljs-number">0</span><br>DbSqlite3\<span class="hljs-attr">TempStore</span> = <span class="hljs-number">2</span><br>FAST\<span class="hljs-attr">CV</span> = <span class="hljs-number">0</span><br>FAST\<span class="hljs-attr">Gpu</span> = <span class="hljs-literal">false</span><br>FAST\<span class="hljs-attr">GpuKeypointsRatio</span> = <span class="hljs-number">0.05</span><br>FAST\<span class="hljs-attr">GridCols</span> = <span class="hljs-number">0</span><br>FAST\<span class="hljs-attr">GridRows</span> = <span class="hljs-number">0</span><br>FAST\<span class="hljs-attr">MaxThreshold</span> = <span class="hljs-number">200</span><br>FAST\<span class="hljs-attr">MinThreshold</span> = <span class="hljs-number">7</span><br>FAST\<span class="hljs-attr">NonmaxSuppression</span> = <span class="hljs-literal">true</span><br>FAST\<span class="hljs-attr">Threshold</span> = <span class="hljs-number">20</span><br>FREAK\<span class="hljs-attr">NOctaves</span> = <span class="hljs-number">4</span><br>FREAK\<span class="hljs-attr">OrientationNormalized</span> = <span class="hljs-literal">true</span><br>FREAK\<span class="hljs-attr">PatternScale</span> = <span class="hljs-number">22</span><br>FREAK\<span class="hljs-attr">ScaleNormalized</span> = <span class="hljs-literal">true</span><br>GFTT\<span class="hljs-attr">BlockSize</span> = <span class="hljs-number">3</span><br>GFTT\<span class="hljs-attr">K</span> = <span class="hljs-number">0.04</span><br>GFTT\<span class="hljs-attr">MinDistance</span> = <span class="hljs-number">7</span><br>GFTT\<span class="hljs-attr">QualityLevel</span> = <span class="hljs-number">0.001</span><br>GFTT\<span class="hljs-attr">UseHarrisDetector</span> = <span class="hljs-literal">false</span><br>GMS\<span class="hljs-attr">ThresholdFactor</span> = <span class="hljs-number">6.0</span><br>GMS\<span class="hljs-attr">WithRotation</span> = <span class="hljs-literal">false</span><br>GMS\<span class="hljs-attr">WithScale</span> = <span class="hljs-literal">false</span><br>GTSAM\<span class="hljs-attr">Optimizer</span> = <span class="hljs-number">1</span><br>Grid\<span class="hljs-attr">3D</span> = <span class="hljs-literal">true</span><br>Grid\<span class="hljs-attr">CellSize</span> = <span class="hljs-number">0.05</span><br>Grid\<span class="hljs-attr">ClusterRadius</span> = <span class="hljs-number">0.1</span><br>Grid\<span class="hljs-attr">DepthDecimation</span> = <span class="hljs-number">4</span><br>Grid\<span class="hljs-attr">DepthRoiRatios</span> = <span class="hljs-number">0.0</span> <span class="hljs-number">0.0</span> <span class="hljs-number">0.0</span> <span class="hljs-number">0.0</span><br>Grid\<span class="hljs-attr">FlatObstacleDetected</span> = <span class="hljs-literal">true</span><br>Grid\<span class="hljs-attr">FootprintHeight</span> = <span class="hljs-number">0.0</span><br>Grid\<span class="hljs-attr">FootprintLength</span> = <span class="hljs-number">0.0</span><br>Grid\<span class="hljs-attr">FootprintWidth</span> = <span class="hljs-number">0.0</span><br>Grid\<span class="hljs-attr">GroundIsObstacle</span> = <span class="hljs-literal">false</span><br>Grid\<span class="hljs-attr">MapFrameProjection</span> = <span class="hljs-literal">false</span><br>Grid\<span class="hljs-attr">MaxGroundAngle</span> = <span class="hljs-number">45</span><br>Grid\<span class="hljs-attr">MaxGroundHeight</span> = <span class="hljs-number">0.0</span><br>Grid\<span class="hljs-attr">MaxObstacleHeight</span> = <span class="hljs-number">0.0</span><br>Grid\<span class="hljs-attr">MinClusterSize</span> = <span class="hljs-number">10</span><br>Grid\<span class="hljs-attr">MinGroundHeight</span> = <span class="hljs-number">0.0</span><br>Grid\<span class="hljs-attr">NoiseFilteringMinNeighbors</span> = <span class="hljs-number">5</span><br>Grid\<span class="hljs-attr">NoiseFilteringRadius</span> = <span class="hljs-number">0.0</span><br>Grid\<span class="hljs-attr">NormalK</span> = <span class="hljs-number">20</span><br>Grid\<span class="hljs-attr">NormalsSegmentation</span> = <span class="hljs-literal">true</span><br>Grid\<span class="hljs-attr">PreVoxelFiltering</span> = <span class="hljs-literal">true</span><br>Grid\<span class="hljs-attr">RangeMax</span> = <span class="hljs-number">5.0</span><br>Grid\<span class="hljs-attr">RangeMin</span> = <span class="hljs-number">0.0</span><br>Grid\<span class="hljs-attr">RayTracing</span> = <span class="hljs-literal">false</span><br>Grid\<span class="hljs-attr">Scan2dUnknownSpaceFilled</span> = <span class="hljs-literal">false</span><br>Grid\<span class="hljs-attr">ScanDecimation</span> = <span class="hljs-number">1</span><br>Grid\<span class="hljs-attr">Sensor</span> = <span class="hljs-number">1</span><br>GridGlobal\<span class="hljs-attr">AltitudeDelta</span> = <span class="hljs-number">0</span><br>GridGlobal\<span class="hljs-attr">Eroded</span> = <span class="hljs-literal">false</span><br>GridGlobal\<span class="hljs-attr">FloodFillDepth</span> = <span class="hljs-number">0</span><br>GridGlobal\<span class="hljs-attr">FootprintRadius</span> = <span class="hljs-number">0.0</span><br>GridGlobal\<span class="hljs-attr">FullUpdate</span> = <span class="hljs-literal">true</span><br>GridGlobal\<span class="hljs-attr">MaxNodes</span> = <span class="hljs-number">0</span><br>GridGlobal\<span class="hljs-attr">MinSize</span> = <span class="hljs-number">0.0</span><br>GridGlobal\<span class="hljs-attr">OccupancyThr</span> = <span class="hljs-number">0.5</span><br>GridGlobal\<span class="hljs-attr">ProbClampingMax</span> = <span class="hljs-number">0.971</span><br>GridGlobal\<span class="hljs-attr">ProbClampingMin</span> = <span class="hljs-number">0.1192</span><br>GridGlobal\<span class="hljs-attr">ProbHit</span> = <span class="hljs-number">0.7</span><br>GridGlobal\<span class="hljs-attr">ProbMiss</span> = <span class="hljs-number">0.4</span><br>GridGlobal\<span class="hljs-attr">UpdateError</span> = <span class="hljs-number">0.01</span><br>Icp\<span class="hljs-attr">CCFilterOutFarthestPoints</span> = <span class="hljs-literal">false</span><br>Icp\<span class="hljs-attr">CCMaxFinalRMS</span> = <span class="hljs-number">0.2</span><br>Icp\<span class="hljs-attr">CCSamplingLimit</span> = <span class="hljs-number">50000</span><br>Icp\<span class="hljs-attr">CorrespondenceRatio</span> = <span class="hljs-number">0.1</span><br>Icp\<span class="hljs-attr">DebugExportFormat</span> = <br>Icp\<span class="hljs-attr">DownsamplingStep</span> = <span class="hljs-number">1</span><br>Icp\<span class="hljs-attr">Epsilon</span> = <span class="hljs-number">0</span><br>Icp\<span class="hljs-attr">Force4DoF</span> = <span class="hljs-literal">false</span><br>Icp\<span class="hljs-attr">Iterations</span> = <span class="hljs-number">30</span><br>Icp\<span class="hljs-attr">MaxCorrespondenceDistance</span> = <span class="hljs-number">0.1</span><br>Icp\<span class="hljs-attr">MaxRotation</span> = <span class="hljs-number">0.78</span><br>Icp\<span class="hljs-attr">MaxTranslation</span> = <span class="hljs-number">0.2</span><br>Icp\<span class="hljs-attr">OutlierRatio</span> = <span class="hljs-number">0.85</span><br>Icp\<span class="hljs-attr">PMConfig</span> = <br>Icp\<span class="hljs-attr">PMMatcherEpsilon</span> = <span class="hljs-number">0.0</span><br>Icp\<span class="hljs-attr">PMMatcherIntensity</span> = <span class="hljs-literal">false</span><br>Icp\<span class="hljs-attr">PMMatcherKnn</span> = <span class="hljs-number">1</span><br>Icp\<span class="hljs-attr">PointToPlane</span> = <span class="hljs-literal">true</span><br>Icp\<span class="hljs-attr">PointToPlaneGroundNormalsUp</span> = <span class="hljs-number">0.0</span><br>Icp\<span class="hljs-attr">PointToPlaneK</span> = <span class="hljs-number">5</span><br>Icp\<span class="hljs-attr">PointToPlaneLowComplexityStrategy</span> = <span class="hljs-number">1</span><br>Icp\<span class="hljs-attr">PointToPlaneMinComplexity</span> = <span class="hljs-number">0.02</span><br>Icp\<span class="hljs-attr">PointToPlaneRadius</span> = <span class="hljs-number">0.0</span><br>Icp\<span class="hljs-attr">RangeMax</span> = <span class="hljs-number">0</span><br>Icp\<span class="hljs-attr">RangeMin</span> = <span class="hljs-number">0</span><br>Icp\<span class="hljs-attr">Strategy</span> = <span class="hljs-number">1</span><br>Icp\<span class="hljs-attr">VoxelSize</span> = <span class="hljs-number">0.05</span><br>ImuFilter\<span class="hljs-attr">ComplementaryBiasAlpha</span> = <span class="hljs-number">0.01</span><br>ImuFilter\<span class="hljs-attr">ComplementaryDoAdpativeGain</span> = <span class="hljs-literal">true</span><br>ImuFilter\<span class="hljs-attr">ComplementaryDoBiasEstimation</span> = <span class="hljs-literal">true</span><br>ImuFilter\<span class="hljs-attr">ComplementaryGainAcc</span> = <span class="hljs-number">0.01</span><br>ImuFilter\<span class="hljs-attr">MadgwickGain</span> = <span class="hljs-number">0.1</span><br>ImuFilter\<span class="hljs-attr">MadgwickZeta</span> = <span class="hljs-number">0.0</span><br>KAZE\<span class="hljs-attr">Diffusivity</span> = <span class="hljs-number">1</span><br>KAZE\<span class="hljs-attr">Extended</span> = <span class="hljs-literal">false</span><br>KAZE\<span class="hljs-attr">NOctaveLayers</span> = <span class="hljs-number">4</span><br>KAZE\<span class="hljs-attr">NOctaves</span> = <span class="hljs-number">4</span><br>KAZE\<span class="hljs-attr">Threshold</span> = <span class="hljs-number">0.001</span><br>KAZE\<span class="hljs-attr">Upright</span> = <span class="hljs-literal">false</span><br>Kp\<span class="hljs-attr">BadSignRatio</span> = <span class="hljs-number">0.5</span><br>Kp\<span class="hljs-attr">ByteToFloat</span> = <span class="hljs-literal">false</span><br>Kp\<span class="hljs-attr">DetectorStrategy</span> = <span class="hljs-number">8</span><br>Kp\<span class="hljs-attr">DictionaryPath</span> = <br>Kp\<span class="hljs-attr">FlannRebalancingFactor</span> = <span class="hljs-number">2.0</span><br>Kp\<span class="hljs-attr">GridCols</span> = <span class="hljs-number">1</span><br>Kp\<span class="hljs-attr">GridRows</span> = <span class="hljs-number">1</span><br>Kp\<span class="hljs-attr">IncrementalDictionary</span> = <span class="hljs-literal">true</span><br>Kp\<span class="hljs-attr">IncrementalFlann</span> = <span class="hljs-literal">true</span><br>Kp\<span class="hljs-attr">MaxDepth</span> = <span class="hljs-number">0</span><br>Kp\<span class="hljs-attr">MaxFeatures</span> = <span class="hljs-number">500</span><br>Kp\<span class="hljs-attr">MinDepth</span> = <span class="hljs-number">0</span><br>Kp\<span class="hljs-attr">NNStrategy</span> = <span class="hljs-number">1</span><br>Kp\<span class="hljs-attr">NewWordsComparedTogether</span> = <span class="hljs-literal">true</span><br>Kp\<span class="hljs-attr">NndrRatio</span> = <span class="hljs-number">0.8</span><br>Kp\<span class="hljs-attr">Parallelized</span> = <span class="hljs-literal">true</span><br>Kp\<span class="hljs-attr">RoiRatios</span> = <span class="hljs-number">0.0</span> <span class="hljs-number">0.0</span> <span class="hljs-number">0.0</span> <span class="hljs-number">0.0</span><br>Kp\<span class="hljs-attr">SubPixEps</span> = <span class="hljs-number">0.02</span><br>Kp\<span class="hljs-attr">SubPixIterations</span> = <span class="hljs-number">0</span><br>Kp\<span class="hljs-attr">SubPixWinSize</span> = <span class="hljs-number">3</span><br>Kp\<span class="hljs-attr">TfIdfLikelihoodUsed</span> = <span class="hljs-literal">true</span><br>Marker\<span class="hljs-attr">CornerRefinementMethod</span> = <span class="hljs-number">0</span><br>Marker\<span class="hljs-attr">Dictionary</span> = <span class="hljs-number">0</span><br>Marker\<span class="hljs-attr">Length</span> = <span class="hljs-number">0</span><br>Marker\<span class="hljs-attr">MaxDepthError</span> = <span class="hljs-number">0.01</span><br>Marker\<span class="hljs-attr">MaxRange</span> = <span class="hljs-number">0.0</span><br>Marker\<span class="hljs-attr">MinRange</span> = <span class="hljs-number">0.0</span><br>Marker\<span class="hljs-attr">Priors</span> = <br>Marker\<span class="hljs-attr">PriorsVarianceAngular</span> = <span class="hljs-number">0.001</span><br>Marker\<span class="hljs-attr">PriorsVarianceLinear</span> = <span class="hljs-number">0.001</span><br>Marker\<span class="hljs-attr">VarianceAngular</span> = <span class="hljs-number">0.01</span><br>Marker\<span class="hljs-attr">VarianceLinear</span> = <span class="hljs-number">0.001</span><br>Mem\<span class="hljs-attr">BadSignaturesIgnored</span> = <span class="hljs-literal">false</span><br>Mem\<span class="hljs-attr">BinDataKept</span> = <span class="hljs-literal">true</span><br>Mem\<span class="hljs-attr">CompressionParallelized</span> = <span class="hljs-literal">true</span><br>Mem\<span class="hljs-attr">CovOffDiagIgnored</span> = <span class="hljs-literal">true</span><br>Mem\<span class="hljs-attr">DepthAsMask</span> = <span class="hljs-literal">true</span><br>Mem\<span class="hljs-attr">GenerateIds</span> = <span class="hljs-literal">true</span><br>Mem\<span class="hljs-attr">ImageCompressionFormat</span> = .jpg<br>Mem\<span class="hljs-attr">ImageKept</span> = <span class="hljs-literal">false</span><br>Mem\<span class="hljs-attr">ImagePostDecimation</span> = <span class="hljs-number">1</span><br>Mem\<span class="hljs-attr">ImagePreDecimation</span> = <span class="hljs-number">1</span><br>Mem\<span class="hljs-attr">IncrementalMemory</span> = <span class="hljs-literal">true</span><br>Mem\<span class="hljs-attr">InitWMWithAllNodes</span> = <span class="hljs-literal">false</span><br>Mem\<span class="hljs-attr">IntermediateNodeDataKept</span> = <span class="hljs-literal">false</span><br>Mem\<span class="hljs-attr">LaserScanDownsampleStepSize</span> = <span class="hljs-number">1</span><br>Mem\<span class="hljs-attr">LaserScanNormalK</span> = <span class="hljs-number">0</span><br>Mem\<span class="hljs-attr">LaserScanNormalRadius</span> = <span class="hljs-number">0.0</span><br>Mem\<span class="hljs-attr">LaserScanVoxelSize</span> = <span class="hljs-number">0.0</span><br>Mem\<span class="hljs-attr">LocalizationDataSaved</span> = <span class="hljs-literal">false</span><br>Mem\<span class="hljs-attr">MapLabelsAdded</span> = <span class="hljs-literal">true</span><br>Mem\<span class="hljs-attr">NotLinkedNodesKept</span> = <span class="hljs-literal">true</span><br>Mem\<span class="hljs-attr">RawDescriptorsKept</span> = <span class="hljs-literal">true</span><br>Mem\<span class="hljs-attr">RecentWmRatio</span> = <span class="hljs-number">0.2</span><br>Mem\<span class="hljs-attr">ReduceGraph</span> = <span class="hljs-literal">false</span><br>Mem\<span class="hljs-attr">RehearsalIdUpdatedToNewOne</span> = <span class="hljs-literal">false</span><br>Mem\<span class="hljs-attr">RehearsalSimilarity</span> = <span class="hljs-number">0.6</span><br>Mem\<span class="hljs-attr">RehearsalWeightIgnoredWhileMoving</span> = <span class="hljs-literal">false</span><br>Mem\<span class="hljs-attr">STMSize</span> = <span class="hljs-number">10</span><br>Mem\<span class="hljs-attr">SaveDepth16Format</span> = <span class="hljs-literal">false</span><br>Mem\<span class="hljs-attr">StereoFromMotion</span> = <span class="hljs-literal">false</span><br>Mem\<span class="hljs-attr">TransferSortingByWeightId</span> = <span class="hljs-literal">false</span><br>Mem\<span class="hljs-attr">UseOdomFeatures</span> = <span class="hljs-literal">true</span><br>Mem\<span class="hljs-attr">UseOdomGravity</span> = <span class="hljs-literal">false</span><br>ORB\<span class="hljs-attr">EdgeThreshold</span> = <span class="hljs-number">19</span><br>ORB\<span class="hljs-attr">FirstLevel</span> = <span class="hljs-number">0</span><br>ORB\<span class="hljs-attr">Gpu</span> = <span class="hljs-literal">false</span><br>ORB\<span class="hljs-attr">NLevels</span> = <span class="hljs-number">3</span><br>ORB\<span class="hljs-attr">PatchSize</span> = <span class="hljs-number">31</span><br>ORB\<span class="hljs-attr">ScaleFactor</span> = <span class="hljs-number">2</span><br>ORB\<span class="hljs-attr">ScoreType</span> = <span class="hljs-number">0</span><br>ORB\<span class="hljs-attr">WTA_K</span> = <span class="hljs-number">2</span><br>Optimizer\<span class="hljs-attr">Epsilon</span> = <span class="hljs-number">0.0</span><br>Optimizer\<span class="hljs-attr">GravitySigma</span> = <span class="hljs-number">0.3</span><br>Optimizer\<span class="hljs-attr">Iterations</span> = <span class="hljs-number">20</span><br>Optimizer\<span class="hljs-attr">LandmarksIgnored</span> = <span class="hljs-literal">false</span><br>Optimizer\<span class="hljs-attr">PriorsIgnored</span> = <span class="hljs-literal">true</span><br>Optimizer\<span class="hljs-attr">Robust</span> = <span class="hljs-literal">false</span><br>Optimizer\<span class="hljs-attr">Strategy</span> = <span class="hljs-number">1</span><br>Optimizer\<span class="hljs-attr">VarianceIgnored</span> = <span class="hljs-literal">false</span><br>PyDetector\<span class="hljs-attr">Cuda</span> = <span class="hljs-literal">true</span><br>PyDetector\<span class="hljs-attr">Path</span> = <br>PyMatcher\<span class="hljs-attr">Cuda</span> = <span class="hljs-literal">true</span><br>PyMatcher\<span class="hljs-attr">Iterations</span> = <span class="hljs-number">20</span><br>PyMatcher\<span class="hljs-attr">Model</span> = indoor<br>PyMatcher\<span class="hljs-attr">Path</span> = <br>PyMatcher\<span class="hljs-attr">Threshold</span> = <span class="hljs-number">0.2</span><br>RGBD\<span class="hljs-attr">AngularSpeedUpdate</span> = <span class="hljs-number">0.0</span><br>RGBD\<span class="hljs-attr">AngularUpdate</span> = <span class="hljs-number">0.1</span><br>RGBD\<span class="hljs-attr">CreateOccupancyGrid</span> = <span class="hljs-literal">true</span><br>RGBD\<span class="hljs-attr">Enabled</span> = <span class="hljs-literal">true</span><br>RGBD\<span class="hljs-attr">GoalReachedRadius</span> = <span class="hljs-number">0.5</span><br>RGBD\<span class="hljs-attr">GoalsSavedInUserData</span> = <span class="hljs-literal">false</span><br>RGBD\<span class="hljs-attr">InvertedReg</span> = <span class="hljs-literal">false</span><br>RGBD\<span class="hljs-attr">LinearSpeedUpdate</span> = <span class="hljs-number">0.0</span><br>RGBD\<span class="hljs-attr">LinearUpdate</span> = <span class="hljs-number">0.1</span><br>RGBD\<span class="hljs-attr">LocalBundleOnLoopClosure</span> = <span class="hljs-literal">false</span><br>RGBD\<span class="hljs-attr">LocalImmunizationRatio</span> = <span class="hljs-number">0.25</span><br>RGBD\<span class="hljs-attr">LocalRadius</span> = <span class="hljs-number">10</span><br>RGBD\<span class="hljs-attr">LoopClosureIdentityGuess</span> = <span class="hljs-literal">false</span><br>RGBD\<span class="hljs-attr">LoopClosureReextractFeatures</span> = <span class="hljs-literal">false</span><br>RGBD\<span class="hljs-attr">LoopCovLimited</span> = <span class="hljs-literal">false</span><br>RGBD\<span class="hljs-attr">MarkerDetection</span> = <span class="hljs-literal">false</span><br>RGBD\<span class="hljs-attr">MaxLocalRetrieved</span> = <span class="hljs-number">2</span><br>RGBD\<span class="hljs-attr">MaxLoopClosureDistance</span> = <span class="hljs-number">0.0</span><br>RGBD\<span class="hljs-attr">MaxOdomCacheSize</span> = <span class="hljs-number">10</span><br>RGBD\<span class="hljs-attr">NeighborLinkRefining</span> = <span class="hljs-literal">false</span><br>RGBD\<span class="hljs-attr">NewMapOdomChangeDistance</span> = <span class="hljs-number">0</span><br>RGBD\<span class="hljs-attr">OptimizeMaxError</span> = <span class="hljs-number">0.0</span><br>RGBD\<span class="hljs-attr">OptimizeFromGraphEnd</span> = <span class="hljs-literal">false</span><br>RGBD\<span class="hljs-attr">PlanAngularVelocity</span> = <span class="hljs-number">0</span><br>RGBD\<span class="hljs-attr">PlanLinearVelocity</span> = <span class="hljs-number">0</span><br>RGBD\<span class="hljs-attr">PlanStuckIterations</span> = <span class="hljs-number">0</span><br>RGBD\<span class="hljs-attr">ProximityAngle</span> = <span class="hljs-number">45</span><br>RGBD\<span class="hljs-attr">ProximityBySpace</span> = <span class="hljs-literal">true</span><br>RGBD\<span class="hljs-attr">ProximityByTime</span> = <span class="hljs-literal">false</span><br>RGBD\<span class="hljs-attr">ProximityGlobalScanMap</span> = <span class="hljs-literal">false</span><br>RGBD\<span class="hljs-attr">ProximityMaxGraphDepth</span> = <span class="hljs-number">50</span><br>RGBD\<span class="hljs-attr">ProximityMaxPaths</span> = <span class="hljs-number">3</span><br>RGBD\<span class="hljs-attr">ProximityMergedScanCovFactor</span> = <span class="hljs-number">100.0</span><br>RGBD\<span class="hljs-attr">ProximityOdomGuess</span> = <span class="hljs-literal">false</span><br>RGBD\<span class="hljs-attr">ProximityPathFilteringRadius</span> = <span class="hljs-number">1</span><br>RGBD\<span class="hljs-attr">ProximityPathMaxNeighbors</span> = <span class="hljs-number">0</span><br>RGBD\<span class="hljs-attr">ProximityPathRawPosesUsed</span> = <span class="hljs-literal">true</span><br>RGBD\<span class="hljs-attr">ScanMatchingIdsSavedInLinks</span> = <span class="hljs-literal">true</span><br>RGBD\<span class="hljs-attr">StartAtOrigin</span> = <span class="hljs-literal">false</span><br>Reg\<span class="hljs-attr">Force3DoF</span> = <span class="hljs-literal">false</span><br>Reg\<span class="hljs-attr">RepeatOnce</span> = <span class="hljs-literal">true</span><br>Reg\<span class="hljs-attr">Strategy</span> = <span class="hljs-number">0</span><br>Rtabmap\<span class="hljs-attr">ComputeRMSE</span> = <span class="hljs-literal">true</span><br>Rtabmap\<span class="hljs-attr">CreateIntermediateNodes</span> = <span class="hljs-literal">false</span><br>Rtabmap\<span class="hljs-attr">DetectionRate</span> = <span class="hljs-number">2</span><br>Rtabmap\<span class="hljs-attr">ImageBufferSize</span> = <span class="hljs-number">1</span><br>Rtabmap\<span class="hljs-attr">ImagesAlreadyRectified</span> = <span class="hljs-literal">true</span><br>Rtabmap\<span class="hljs-attr">LoopGPS</span> = <span class="hljs-literal">true</span><br>Rtabmap\<span class="hljs-attr">LoopRatio</span> = <span class="hljs-number">0</span><br>Rtabmap\<span class="hljs-attr">LoopThr</span> = <span class="hljs-number">0.11</span><br>Rtabmap\<span class="hljs-attr">MaxRepublished</span> = <span class="hljs-number">2</span><br>Rtabmap\<span class="hljs-attr">MaxRetrieved</span> = <span class="hljs-number">2</span><br>Rtabmap\<span class="hljs-attr">MemoryThr</span> = <span class="hljs-number">0</span><br>Rtabmap\<span class="hljs-attr">PublishLastSignature</span> = <span class="hljs-literal">true</span><br>Rtabmap\<span class="hljs-attr">PublishLikelihood</span> = <span class="hljs-literal">true</span><br>Rtabmap\<span class="hljs-attr">PublishPdf</span> = <span class="hljs-literal">true</span><br>Rtabmap\<span class="hljs-attr">PublishRAMUsage</span> = <span class="hljs-literal">false</span><br>Rtabmap\<span class="hljs-attr">PublishStats</span> = <span class="hljs-literal">true</span><br>Rtabmap\<span class="hljs-attr">RectifyOnlyFeatures</span> = <span class="hljs-literal">false</span><br>Rtabmap\<span class="hljs-attr">SaveWMState</span> = <span class="hljs-literal">false</span><br>Rtabmap\<span class="hljs-attr">StartNewMapOnGoodSignature</span> = <span class="hljs-literal">false</span><br>Rtabmap\<span class="hljs-attr">StartNewMapOnLoopClosure</span> = <span class="hljs-literal">false</span><br>Rtabmap\<span class="hljs-attr">StatisticLogged</span> = <span class="hljs-literal">false</span><br>Rtabmap\<span class="hljs-attr">StatisticLoggedHeaders</span> = <span class="hljs-literal">true</span><br>Rtabmap\<span class="hljs-attr">StatisticLogsBufferedInRAM</span> = <span class="hljs-literal">true</span><br>Rtabmap\<span class="hljs-attr">TimeThr</span> = <span class="hljs-number">0</span><br>Rtabmap\<span class="hljs-attr">WorkingDirectory</span> = /home/asudct/.ros<br>SIFT\<span class="hljs-attr">ContrastThreshold</span> = <span class="hljs-number">0.04</span><br>SIFT\<span class="hljs-attr">EdgeThreshold</span> = <span class="hljs-number">10</span><br>SIFT\<span class="hljs-attr">NFeatures</span> = <span class="hljs-number">0</span><br>SIFT\<span class="hljs-attr">NOctaveLayers</span> = <span class="hljs-number">3</span><br>SIFT\<span class="hljs-attr">RootSIFT</span> = <span class="hljs-literal">false</span><br>SIFT\<span class="hljs-attr">Sigma</span> = <span class="hljs-number">1.6</span><br>SURF\<span class="hljs-attr">Extended</span> = <span class="hljs-literal">false</span><br>SURF\<span class="hljs-attr">GpuKeypointsRatio</span> = <span class="hljs-number">0.01</span><br>SURF\<span class="hljs-attr">GpuVersion</span> = <span class="hljs-literal">false</span><br>SURF\<span class="hljs-attr">HessianThreshold</span> = <span class="hljs-number">500</span><br>SURF\<span class="hljs-attr">OctaveLayers</span> = <span class="hljs-number">2</span><br>SURF\<span class="hljs-attr">Octaves</span> = <span class="hljs-number">4</span><br>SURF\<span class="hljs-attr">Upright</span> = <span class="hljs-literal">false</span><br>Stereo\<span class="hljs-attr">DenseStrategy</span> = <span class="hljs-number">0</span><br>Stereo\<span class="hljs-attr">Eps</span> = <span class="hljs-number">0.01</span><br>Stereo\<span class="hljs-attr">Iterations</span> = <span class="hljs-number">30</span><br>Stereo\<span class="hljs-attr">MaxDisparity</span> = <span class="hljs-number">128.0</span><br>Stereo\<span class="hljs-attr">MaxLevel</span> = <span class="hljs-number">5</span><br>Stereo\<span class="hljs-attr">MinDisparity</span> = <span class="hljs-number">0.5</span><br>Stereo\<span class="hljs-attr">OpticalFlow</span> = <span class="hljs-literal">true</span><br>Stereo\<span class="hljs-attr">SSD</span> = <span class="hljs-literal">true</span><br>Stereo\<span class="hljs-attr">WinHeight</span> = <span class="hljs-number">3</span><br>Stereo\<span class="hljs-attr">WinWidth</span> = <span class="hljs-number">15</span><br>StereoBM\<span class="hljs-attr">BlockSize</span> = <span class="hljs-number">15</span><br>StereoBM\<span class="hljs-attr">Disp12MaxDiff</span> = -<span class="hljs-number">1</span><br>StereoBM\<span class="hljs-attr">MinDisparity</span> = <span class="hljs-number">0</span><br>StereoBM\<span class="hljs-attr">NumDisparities</span> = <span class="hljs-number">128</span><br>StereoBM\<span class="hljs-attr">PreFilterCap</span> = <span class="hljs-number">31</span><br>StereoBM\<span class="hljs-attr">PreFilterSize</span> = <span class="hljs-number">9</span><br>StereoBM\<span class="hljs-attr">SpeckleRange</span> = <span class="hljs-number">4</span><br>StereoBM\<span class="hljs-attr">SpeckleWindowSize</span> = <span class="hljs-number">100</span><br>StereoBM\<span class="hljs-attr">TextureThreshold</span> = <span class="hljs-number">10</span><br>StereoBM\<span class="hljs-attr">UniquenessRatio</span> = <span class="hljs-number">15</span><br>StereoSGBM\<span class="hljs-attr">BlockSize</span> = <span class="hljs-number">15</span><br>StereoSGBM\<span class="hljs-attr">Disp12MaxDiff</span> = <span class="hljs-number">1</span><br>StereoSGBM\<span class="hljs-attr">MinDisparity</span> = <span class="hljs-number">0</span><br>StereoSGBM\<span class="hljs-attr">Mode</span> = <span class="hljs-number">2</span><br>StereoSGBM\<span class="hljs-attr">NumDisparities</span> = <span class="hljs-number">128</span><br>StereoSGBM\<span class="hljs-attr">P1</span> = <span class="hljs-number">2</span><br>StereoSGBM\<span class="hljs-attr">P2</span> = <span class="hljs-number">5</span><br>StereoSGBM\<span class="hljs-attr">PreFilterCap</span> = <span class="hljs-number">31</span><br>StereoSGBM\<span class="hljs-attr">SpeckleRange</span> = <span class="hljs-number">4</span><br>StereoSGBM\<span class="hljs-attr">SpeckleWindowSize</span> = <span class="hljs-number">100</span><br>StereoSGBM\<span class="hljs-attr">UniquenessRatio</span> = <span class="hljs-number">20</span><br>SuperPoint\<span class="hljs-attr">Cuda</span> = <span class="hljs-literal">true</span><br>SuperPoint\<span class="hljs-attr">ModelPath</span> = <br>SuperPoint\<span class="hljs-attr">NMS</span> = <span class="hljs-literal">true</span><br>SuperPoint\<span class="hljs-attr">NMSRadius</span> = <span class="hljs-number">4</span><br>SuperPoint\<span class="hljs-attr">Threshold</span> = <span class="hljs-number">0.010</span><br>VhEp\<span class="hljs-attr">Enabled</span> = <span class="hljs-literal">false</span><br>VhEp\<span class="hljs-attr">MatchCountMin</span> = <span class="hljs-number">8</span><br>VhEp\<span class="hljs-attr">RansacParam1</span> = <span class="hljs-number">3</span><br>VhEp\<span class="hljs-attr">RansacParam2</span> = <span class="hljs-number">0.99</span><br>Vis\<span class="hljs-attr">BundleAdjustment</span> = <span class="hljs-number">1</span><br>Vis\<span class="hljs-attr">CorFlowEps</span> = <span class="hljs-number">0.01</span><br>Vis\<span class="hljs-attr">CorFlowIterations</span> = <span class="hljs-number">30</span><br>Vis\<span class="hljs-attr">CorFlowMaxLevel</span> = <span class="hljs-number">3</span><br>Vis\<span class="hljs-attr">CorFlowWinSize</span> = <span class="hljs-number">16</span><br>Vis\<span class="hljs-attr">CorGuessMatchToProjection</span> = <span class="hljs-literal">false</span><br>Vis\<span class="hljs-attr">CorGuessWinSize</span> = <span class="hljs-number">40</span><br>Vis\<span class="hljs-attr">CorNNDR</span> = <span class="hljs-number">0.8</span><br>Vis\<span class="hljs-attr">CorNNType</span> = <span class="hljs-number">1</span><br>Vis\<span class="hljs-attr">CorType</span> = <span class="hljs-number">0</span><br>Vis\<span class="hljs-attr">DepthAsMask</span> = <span class="hljs-literal">true</span><br>Vis\<span class="hljs-attr">EpipolarGeometryVar</span> = <span class="hljs-number">0.1</span><br>Vis\<span class="hljs-attr">EstimationType</span> = <span class="hljs-number">1</span><br>Vis\<span class="hljs-attr">FeatureType</span> = <span class="hljs-number">8</span><br>Vis\<span class="hljs-attr">ForwardEstOnly</span> = <span class="hljs-literal">true</span><br>Vis\<span class="hljs-attr">GridCols</span> = <span class="hljs-number">1</span><br>Vis\<span class="hljs-attr">GridRows</span> = <span class="hljs-number">1</span><br>Vis\<span class="hljs-attr">InlierDistance</span> = <span class="hljs-number">0.1</span><br>Vis\<span class="hljs-attr">Iterations</span> = <span class="hljs-number">300</span><br>Vis\<span class="hljs-attr">MaxDepth</span> = <span class="hljs-number">0</span><br>Vis\<span class="hljs-attr">MaxFeatures</span> = <span class="hljs-number">1000</span><br>Vis\<span class="hljs-attr">MeanInliersDistance</span> = <span class="hljs-number">0.0</span><br>Vis\<span class="hljs-attr">MinDepth</span> = <span class="hljs-number">0</span><br>Vis\<span class="hljs-attr">MinInliers</span> = <span class="hljs-number">15</span><br>Vis\<span class="hljs-attr">MinInliersDistribution</span> = <span class="hljs-number">0.0</span><br>Vis\<span class="hljs-attr">PnPFlags</span> = <span class="hljs-number">0</span><br>Vis\<span class="hljs-attr">PnPMaxVariance</span> = <span class="hljs-number">0.0</span><br>Vis\<span class="hljs-attr">PnPRefineIterations</span> = <span class="hljs-number">0</span><br>Vis\<span class="hljs-attr">PnPReprojError</span> = <span class="hljs-number">2</span><br>Vis\<span class="hljs-attr">RefineIterations</span> = <span class="hljs-number">5</span><br>Vis\<span class="hljs-attr">RoiRatios</span> = <span class="hljs-number">0.0</span> <span class="hljs-number">0.0</span> <span class="hljs-number">0.0</span> <span class="hljs-number">0.0</span><br>Vis\<span class="hljs-attr">SubPixEps</span> = <span class="hljs-number">0.02</span><br>Vis\<span class="hljs-attr">SubPixIterations</span> = <span class="hljs-number">0</span><br>Vis\<span class="hljs-attr">SubPixWinSize</span> = <span class="hljs-number">3</span><br>g2o\<span class="hljs-attr">Baseline</span> = <span class="hljs-number">0.075</span><br>g2o\<span class="hljs-attr">Optimizer</span> = <span class="hljs-number">0</span><br>g2o\<span class="hljs-attr">PixelVariance</span> = <span class="hljs-number">1.0</span><br>g2o\<span class="hljs-attr">RobustKernelDelta</span> = <span class="hljs-number">8</span><br>g2o\<span class="hljs-attr">Solver</span> = <span class="hljs-number">0</span><br></code></pre></td></tr></table></figure><p>其实有很多参数根本就没有修改,但是因为保存的时候会自动保存,也就无所谓了 </p><h3 id="保存"><a href="#保存" class="headerlink" title="保存"></a>保存</h3><p>为了保存建好的地图到2D Occupancy,我们需要使用map_server的map_saver 节点<br>在上述建图运行时</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">rosrun map_server map_saver map:=/rtabmap/grid_map -f filename<br></code></pre></td></tr></table></figure><p>随后CTRL+C退出建图即可,rtabmap会自动保存database到.ros/下,请进行备份<br>通过使用</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">rtabmapdatabase-Viewer .ros/rtabmap.db<br></code></pre></td></tr></table></figure><p>就可以预览刚才建立的.db了,既可以导出3D点云,Octomap地图,也可以对2D地图进行编辑,修改,删除地图中因噪声产生的错误点位。</p><h3 id="重定位"><a href="#重定位" class="headerlink" title="重定位"></a>重定位</h3><p>只需要在之前的launch文件中添加</p><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs xml"><span class="hljs-tag"><<span class="hljs-name">include</span> <span class="hljs-attr">file</span>=<span class="hljs-string">"$(find rtabmap_ros)/launch/rtabmap.launch"</span>></span><br>...<br> <span class="hljs-tag"><<span class="hljs-name">arg</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"localization"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"true"</span>/></span><br>...<br>d<span class="hljs-tag"></<span class="hljs-name">include</span>></span><br></code></pre></td></tr></table></figure><p>或者运行launch文件的时候使用</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">roslaunch rtabmap_launch rtabmap.launch localization:=<span class="hljs-literal">true</span><br></code></pre></td></tr></table></figure><p>即可开启定位<br><strong>注意:</strong><em>在使用定位的时候,尽量保证定位开始时,摄像头处于地图的起始位置,并且在节点启动时,不要让里程计有变化的输出值,不然会导致定位的漂移,需要重新启动定位才能解决</em><br>定位信息在<code>/rtabmap/localization_pose</code>topic内,里程计相对于地图的offset则在<code>/tf</code>中可以找到,根据之前保存的Occupancy地图和对应的yaml文件,就可以确定位置了。</p>]]></content>
<categories>
<category>教程</category>
</categories>
<tags>
<tag>SLAM</tag>
<tag>rtabmap</tag>
<tag>realsense</tag>
<tag>ROS</tag>
</tags>
</entry>
<entry>
<title>Ubuntu下使用terminator或其他终端软件并替换默认终端和右键菜单</title>
<link href="/2024/07/05/Ubuntu%E4%B8%8B%E4%BD%BF%E7%94%A8terminator%E6%88%96%E5%85%B6%E4%BB%96%E7%BB%88%E7%AB%AF%E8%BD%AF%E4%BB%B6%E5%B9%B6%E6%9B%BF%E6%8D%A2%E9%BB%98%E8%AE%A4%E7%BB%88%E7%AB%AF%E5%92%8C%E5%8F%B3%E9%94%AE%E8%8F%9C%E5%8D%95/"/>
<url>/2024/07/05/Ubuntu%E4%B8%8B%E4%BD%BF%E7%94%A8terminator%E6%88%96%E5%85%B6%E4%BB%96%E7%BB%88%E7%AB%AF%E8%BD%AF%E4%BB%B6%E5%B9%B6%E6%9B%BF%E6%8D%A2%E9%BB%98%E8%AE%A4%E7%BB%88%E7%AB%AF%E5%92%8C%E5%8F%B3%E9%94%AE%E8%8F%9C%E5%8D%95/</url>
<content type="html"><![CDATA[<h1 id="Ubuntu下使用terminator或其他终端软件并替换默认终端和右键菜单"><a href="#Ubuntu下使用terminator或其他终端软件并替换默认终端和右键菜单" class="headerlink" title="Ubuntu下使用terminator或其他终端软件并替换默认终端和右键菜单"></a>Ubuntu下使用terminator或其他终端软件并替换默认终端和右键菜单</h1><p>Ubuntu默认所使用的gnome-terminal,虽然简洁好用,但是不能分多个窗口<br>我个人在使用过程中会出现输入卡顿,补全卡顿等问题,有时候很烦心<br>使用一个外观更加现代,功能更加丰富,性能强大的Terminal,可以提高我们的效率</p><span id="more"></span><h2 id="请注意区分"><a href="#请注意区分" class="headerlink" title="请注意区分"></a>请注意区分</h2><p>Terminal与Shell是不同的</p><ul><li>Terminal是用来显示Shell,与Shell交互的界面 </li><li>Shell则是系统内核Core外层,与Core进行交互的一层</li></ul><p>在GUI环境下理论上不存在真正的Terminal,所以你看到这些TerminalGUI往往都会带有Simulator的字样<br>在22.04版本中,需要使用<code>Ctrl+Alt+F3/4/5/6</code>来进入不同Ternimal,这个才是Ubuntu真正的终端。<br>退出请尝试<code>Ctrl+Alt+F1/2/7</code>,或在终端输入用户名密码登陆后尝试<code>starx</code>命令 </p><h2 id="安装你选择的终端软件"><a href="#安装你选择的终端软件" class="headerlink" title="安装你选择的终端软件"></a>安装你选择的终端软件</h2><p>例如安装Terminator</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">sudo apt install terminator<br></code></pre></td></tr></table></figure><p>或者从.deb .AppImage 等软件包安装<br>请确保你知道软件安装的位置</p><h2 id="替换默认终端的快捷键"><a href="#替换默认终端的快捷键" class="headerlink" title="替换默认终端的快捷键"></a>替换默认终端的快捷键</h2><p>使用<code>Ctrl+Alt+T</code>就可以快捷打开终端<br>有的终端软件在安装之后就会自动替换该快捷键<br>如果没有替换,请使用如下指令</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs shell">gsettings set org.gnome.desktop.default-applications.terminal exec /usr/bin/terminator<br>gsettings set org.gnome.desktop.default-applications.terminal exec-arg "-x"<br></code></pre></td></tr></table></figure><p>请把<code>exec</code>后的路径更换成你自己终端的路径<br>要还原初始,请使用</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs shell">gsettings reset org.gnome.desktop.default-applications.terminal exec<br>gsettings reset org.gnome.desktop.default-applications.terminal exec-arg<br></code></pre></td></tr></table></figure><p>也可以通过间接启动的方式 </p><p>1.打开Gnome-terminal,转到你的Profile预设,选择Command命令选项卡<br>2.勾选运行自定义命令而不是Shell<br>3.在自定义命令中键入运行你的Termimal 例如<code>terminator</code> </p><p>如果需要恢复,请使用<code>gnome-terminal --preferences</code>打开选项卡,并取消勾选上述选项</p><h2 id="替换右键菜单"><a href="#替换右键菜单" class="headerlink" title="替换右键菜单"></a>替换右键菜单</h2><p>如果是按照上述第二种方法,此时右键菜单应该已经可用<br>选择在此打开Terminal即可打开你的自定义终端<br>如果没有生效,可以使用这个nautilus<a href="https://github.com/Stunkymonkey/nautilus-open-any-terminal">插件</a><br>这个插件会增加一个新的右键菜单,在当前目录下启动你的终端<br>该插件同时也支持Caja文件管理器,几乎支持所有的主流终端软件,但是需要自己做一些简单的配置<br>建议从源代码安装,安装完成后<code>nautilus -q</code>重新启动文件管理器即可<br>要配置该拓展,需要使用命令行或者dconf-editor<br>通过编辑<code>com.github.stunkymonkey.nautilus-open-any-terminal</code>中的四个不同参数即可 </p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs shell">gsettings set com.github.stunkymonkey.nautilus-open-any-terminal terminal alacritty<br>gsettings set com.github.stunkymonkey.nautilus-open-any-terminal keybindings '<Ctrl><Alt>t'<br>gsettings set com.github.stunkymonkey.nautilus-open-any-terminal new-tab true<br>gsettings set com.github.stunkymonkey.nautilus-open-any-terminal flatpak system<br></code></pre></td></tr></table></figure><p>建议参考Github原文章的参数 </p><p>2024.7.5</p><p>15:43</p>]]></content>
<categories>
<category>教程</category>
</categories>
<tags>
<tag>Ubuntu</tag>
<tag>终端</tag>
</tags>
</entry>
<entry>
<title>使用GitHub Pages和Hexo搭建个人博客</title>
<link href="/2024/06/25/Pages%E5%92%8CHexo%E6%90%AD%E5%BB%BA%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2/"/>
<url>/2024/06/25/Pages%E5%92%8CHexo%E6%90%AD%E5%BB%BA%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2/</url>
<content type="html"><![CDATA[<h1 id="使用GitHub-Pages与Hexo搭建个人博客"><a href="#使用GitHub-Pages与Hexo搭建个人博客" class="headerlink" title="使用GitHub Pages与Hexo搭建个人博客"></a>使用GitHub Pages与Hexo搭建个人博客</h1><p>看了许多利用GitHub Pages建立个人博客的例子,使用的比较多的就是<strong>jkeyll</strong>和<strong>Hexo</strong>,最终选择了使用<strong>Hexo</strong>搭建我的博客,遵循先搭建再部署的原则</p><span id="more"></span><h1 id="搭建博客"><a href="#搭建博客" class="headerlink" title="搭建博客"></a>搭建博客</h1><p>参考<a href="https://hexo.io/zh-cn/">Hexo官方网站</a>,需要先安装以下应用程序 </p><ul><li><strong><a href="https://nodejs.org/">Node.js</a></strong> </li><li><strong><a href="https://git-scm.com/">Git</a></strong></li></ul><h2 id="安装Git"><a href="#安装Git" class="headerlink" title="安装Git"></a>安装Git</h2><p>不同的操作系统拥有不同的安装程序 </p><ul><li>Windows一般使用<a href="https://git-scm.com/download/win">安装包</a> </li><li>Mac系统可以使用Homebrew或者对应安装程序</li><li>Linux则可以通过apt/yum包管理器来进行安装<br>在控制台中键入<br><code>sudo apt-get install git-core</code><br>或者<br><code>sudo yum install git-core</code></li></ul><h2 id="安装Node-js"><a href="#安装Node-js" class="headerlink" title="安装Node.js"></a>安装Node.js</h2><p>直接访问<a href="https://nodejs.org/zh-cn/download/">Node.js官方提供的下载网址</a><br>选择你自己的操作系统和版本,按提示操作即可<br>这里建议Windows和Mac使用安装程序安装<br>Linux使用nvm进行包管理(安装完记得source ~/.bashrc)</p><h2 id="安装Hexo并建立项目"><a href="#安装Hexo并建立项目" class="headerlink" title="安装Hexo并建立项目"></a>安装Hexo并建立项目</h2><p>直接使用npm安装Hexo </p><pre><code class="hljs">npm install -g hexo-cli </code></pre><p>然后新建一个空目录,用于Hexo的初始化 </p><pre><code class="hljs">mkdir mainhexo init maincd mainnpm install</code></pre><p>这样你的Hexo项目就建立好了,各文件的作用请参考<a href="https://hexo.io/zh-cn/docs/setup">文档</a><br>随后就可以为你的Blog选一个主题了,官方提供了一个<a href="https://hexo.io/themes/">主题列表</a>,你可以在里面挑选自己喜欢的样式<br>当然也可以直接Google或者Github搜索,有一些主题应该是没有被收录的<br>随后进入主题的网站按照教程来即可,一般导入主题方法如下<br>本次采用<a href="https://github.com/fluid-dev/hexo-theme-fluid">Fluid主题</a> </p><p><strong>1. 下载解压</strong><br>下载主题文件并解压到themes目录下,将解压出的文件夹命名为主题名<br><strong>2. 修改内容</strong><br>修改Hexo目录中的_config.yml </p><pre><code class="hljs">theme:主题名 language: zh-CN</code></pre><p><strong>3.其他事项</strong><br>有些主题需要自己创建部分内容,例如Fluid主题就需要自己创建About页面</p><h2 id="尝试本地运行"><a href="#尝试本地运行" class="headerlink" title="尝试本地运行"></a>尝试本地运行</h2><p>在项目目录,例如main下输入 </p><pre><code class="hljs">hexo g或者hexo generate</code></pre><p>该命令会生成对应的静态文件在public中<br>控制台中输入 </p><pre><code class="hljs">hexo s或者hexo server</code></pre><p>即可启动服务<br>在浏览器中打开对应网址<a href="http://localhost:4000/">http://localhost:4000</a>即可预览博客<br>每次修改博客内容或者配置想要预览的时候,请先使用<code>hexo clean</code>清除本地文件,然后重新生成并启动服务 </p><h2 id="编写博客"><a href="#编写博客" class="headerlink" title="编写博客"></a>编写博客</h2><p>使用<code>hexo new [layout] <title></code>就可以新建一个博客页面了。<br>其中Layout为博客的布局,默认支持post,page,draft三种,储存在scaffolds文件夹下,不同布局的文章会储存在不同的位置下 </p><table><thead><th>布局</th><th>路径</th></thead><tbody><tr><td>post</td><td>source/_posts</td><tr><td>page</td><td>source/</td><tr><td>draft</td><td>source/_drafts</td><tr></tbody></table><p>通过编辑_config.yaml文件中new_post_name,可以更改默认的文件名称,添加时间标签可以让我们更加方便管理博客,具体的更改方式可以参考<a href="https://hexo.io/zh-cn/docs/writing#%E6%96%87%E4%BB%B6%E5%90%8D%E7%A7%B0">这里</a><br>添加一篇新的post</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">hexo new post <your_title><br></code></pre></td></tr></table></figure><p>随后你的source/_posts文件夹中就会出现这样一个.md文件,依照正常Html或者Markdown格式就可以撰写文章了<br>.md文件上方有用<code>---</code>分割的区域<br>这是文章的扉页,是front-matter提供的功能,可以用来自定义文章的各类变量 </p><table><thead><tr><th>参数</th><th>描述</th><th>默认值</th></tr></thead><tbody><tr><td><code>layout</code></td><td>布局</td><td><a href="/zh-cn/docs/configuration#%E6%96%87%E7%AB%A0"><code>config.default_layout</code></a></td></tr><tr><td><code>title</code></td><td>标题</td><td>文章的文件名</td></tr><tr><td><code>date</code></td><td>建立日期</td><td>文件建立日期</td></tr><tr><td><code>updated</code></td><td>更新日期</td><td>文件更新日期</td></tr><tr><td><code>comments</code></td><td>开启文章的评论功能</td><td><code>true</code></td></tr><tr><td><code>tags</code></td><td>标签(不适用于分页)</td><td></td></tr><tr><td><code>categories</code></td><td>分类(不适用于分页)</td><td></td></tr><tr><td><code>permalink</code></td><td>覆盖文章的永久链接,永久链接应该以 <code>/</code> 或 <code>.html</code> 结尾</td><td><code>null</code></td></tr><tr><td><code>excerpt</code></td><td>纯文本的页面摘要。使用 <a href="/zh-cn/docs/tag-plugins#%E6%96%87%E7%AB%A0%E6%91%98%E8%A6%81%E5%92%8C%E6%88%AA%E6%96%AD">该插件</a> 来格式化文本</td><td></td></tr><tr><td><code>disableNunjucks</code></td><td>启用时禁用 Nunjucks 标签 <code>{{ }}</code>/<code>{% %}</code> 和 <a href="/zh-cn/docs/tag-plugins">标签插件</a> 的渲染功能</td><td>false</td></tr><tr><td><code>lang</code></td><td>设置语言以覆盖 <a href="/zh-cn/docs/internationalization#%E8%B7%AF%E5%BE%84">自动检测</a></td><td>继承自 <code>_config.yml</code></td></tr><tr><td><code>published</code></td><td>文章是否发布</td><td>对于 <code>_posts</code> 下的文章为 <code>true</code>,对于 <code>_draft</code> 下的文章为 <code>false</code></td></tr></tbody></table><p>有关分类与标签编辑,请参照<a href="https://hexo.io/zh-cn/docs/front-matter#%E5%88%86%E7%B1%BB%E5%92%8C%E6%A0%87%E7%AD%BE">这里</a></p><h1 id="部署博客"><a href="#部署博客" class="headerlink" title="部署博客"></a>部署博客</h1><p>建立博客,编辑完成我们的页面,就可以部署到服务器上,这样就能在互联网上访问我们自己的博客了<br>本着免费够用的原则,选择GitHub Pages进行部署</p><h2 id="安装部署工具"><a href="#安装部署工具" class="headerlink" title="安装部署工具"></a>安装部署工具</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">npm install hexo-deployer-git --save<br></code></pre></td></tr></table></figure><p>一行搞定</p><h2 id="设置GitHub-Pages"><a href="#设置GitHub-Pages" class="headerlink" title="设置GitHub Pages"></a>设置GitHub Pages</h2><p>新建一个仓库,命名为<code>用户名.gitbub.io</code><br>仓库中会默认有一个index.md文件,我们需要的是仓库的克隆地址,在Clone选项卡中复制即可<br>转到仓库设置页面,在Pages选项卡中选择你的页面对应的分支,一般选择默认main分支即可。</p><p>建议为仓库和本机配置SSH密钥,可以提高安全性,方便我们修改或上传文档。具体操作清参阅Github<a href="https://docs.github.com/en/authentication/connecting-to-github-with-ssh">教程</a></p><h2 id="在-config-yml-中修改参数"><a href="#在-config-yml-中修改参数" class="headerlink" title="在_config.yml 中修改参数"></a>在_config.yml 中修改参数</h2><p>将deploy项目修改为如下形式</p><pre><code class="hljs">deploy: type: git repo: https://github.com/<username>/<project> branch: main</code></pre><p>这里<code>repo</code>是你自己仓库的HTTP或SSH地址,结尾是.git,请不要与浏览器地址混淆<br><code>branch</code> 选择你在上面Pages页面里设置的分支<br>除此以外,还需要在Git中设置你的name和email,请参考<a href="https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup">ProGit</a>,或者直接利用Vscode的源代码管理功能/Git插件来管理Git与Github账户</p><p>此时运行 </p><pre><code class="hljs">hexo cleanhexo ghexo d</code></pre><p>即可将自己的网站部署到对应Github分支,访问你自己的主页<code><GitHub 用户名>.github.io</code>即可查看结果<br>部署需要时间,博客的更新并不是部署了就会立即更新,请耐心等待。</p><h2 id="Git连接问题"><a href="#Git连接问题" class="headerlink" title="Git连接问题"></a>Git连接问题</h2><p>如果你使用代理连接Github,那么很有可能会发生连接失败的问题<br>在上述的<a href="#%E8%AE%BE%E7%BD%AEgithub-pages">SSH配置</a>中,Github官方文档提到了测试SSH连接的操作步骤,请以该步骤的结果作为参考<br>如果提示SSH连接失败,那么可能是端口的问题<br>在默认的.ssh文件夹中新建文件,键入以下内容</p><pre><code class="hljs">Host github.comHostName ssh.github.comUser gitPort 22</code></pre><p>将文件重命名为config,SSH连接应该会恢复</p><h1 id="写在最后"><a href="#写在最后" class="headerlink" title="写在最后"></a>写在最后</h1><p>以上就是我搭建个人博客经历的大致历程。<br>写完这篇文章作为博客的第一篇文章,我的心里还是挺开心的,毕竟自己搭起来了一个小博客,以后可以存放我自己的乱七八糟的东西。说不定以后可以买一个域名重定向到这里,让我的文章能被更多的人看到,帮助到更多的人。</p><p>2024.6.26<br>19:10</p>]]></content>
<categories>
<category>教程</category>
</categories>
<tags>
<tag>博客</tag>
<tag>GitHub Pages</tag>
<tag>Hexo</tag>
<tag>Vscode</tag>
</tags>
</entry>
<entry>
<title>Hello World</title>
<link href="/2024/06/25/hello-world/"/>
<url>/2024/06/25/hello-world/</url>
<content type="html"><![CDATA[<p>Welcome to <a href="https://hexo.io/">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href="https://hexo.io/docs/troubleshooting.html">troubleshooting</a> or you can ask me on <a href="https://github.com/hexojs/hexo/issues">GitHub</a>.</p><h2 id="Quick-Start"><a href="#Quick-Start" class="headerlink" title="Quick Start"></a>Quick Start</h2><h3 id="Create-a-new-post"><a href="#Create-a-new-post" class="headerlink" title="Create a new post"></a>Create a new post</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ hexo new <span class="hljs-string">"My New Post"</span><br></code></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/writing.html">Writing</a></p><h3 id="Run-server"><a href="#Run-server" class="headerlink" title="Run server"></a>Run server</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ hexo server<br></code></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/server.html">Server</a></p><h3 id="Generate-static-files"><a href="#Generate-static-files" class="headerlink" title="Generate static files"></a>Generate static files</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ hexo generate<br></code></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/generating.html">Generating</a></p><h3 id="Deploy-to-remote-sites"><a href="#Deploy-to-remote-sites" class="headerlink" title="Deploy to remote sites"></a>Deploy to remote sites</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ hexo deploy<br></code></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/one-command-deployment.html">Deployment</a></p>]]></content>
</entry>
</search>