# 9.4 Hector

Hector SLAM效果
## 9.4.1 Hector SLAM計算圖
Hector SLAM算法不同于前面兩種算法,Hector只需要激光雷達數據,而不需要里程計數據。這種算法比較適合手持式的激光雷達,并且對激光雷達的掃描頻率有一定要求。
Hector算法的效果不如Gmapping、Karto,因為它僅用到激光雷達信息。這樣建圖與定位的依據就不如多傳感器結合的效果好。但Hector適合手持移動或者本身就沒有里程計的機器人使用。
Hector的計算圖,如下所示

位于中心的節點叫作`hector_mapping`,它的輸入和其他SLAM框架類似,都包括了`/tf`和`/scan`,另外Hector還訂閱一個`/syscommand`Topic,這是一個字符串型的Topic,當接收到`reset`消息時,地圖和機器人的位置都會初始化到最初最初的位置。
在輸出的Topic方面,hector多了一個`/poseupdate`和`/slam_out_pose`,前者是具有協方差的機器人位姿估計,后者是沒有協方差的位姿估計。
## 9.3.2 服務
與Gmapping相同,提供`/dynamic_map`查詢地圖服務
## 9.3.3 參數
以`ROS-Academy-for-Beginners`中的`hector_slam`為例,選取了它的launch文件`slam_sim_demo/launch/hector_demo.launch`為例,關鍵位置做了注釋:
```xml
<node pkg="hector_mapping" type="hector_mapping" name="hector_height_mapping" output="screen">
<param name="scan_topic" value="scan" />
<param name="base_frame" value="base_link" />
<param name="odom_frame" value="odom" />
<param name="output_timing" value="false"/>
<param name="advertise_map_service" value="true"/>
<param name="use_tf_scan_transformation" value="true"/>
<param name="use_tf_pose_start_estimate" value="false"/>
<param name="pub_map_odom_transform" value="true"/>
<param name="map_with_known_poses" value="false"/>
<param name="map_pub_period" value="1"/>
<param name="update_factor_free" value="0.45"/>
<param name="map_update_distance_thresh" value="0.1"/>
<param name="map_update_angle_thresh" value="0.05"/>
<param name="map_resolution" value="0.05"/>
<param name="map_size" value="1024"/>
<param name="map_start_x" value="0"/>
<param name="map_start_y" value="0"/>
</node>
```
### 演示截圖
hector算法演示效果圖如下:

- 前言
- 第一章 ROS簡介
- 機器人時代的到來
- ROS發展歷程
- 什么是ROS
- 安裝ROS
- 安裝ROS-Academy-for-Beginners教學包
- 二進制與源碼包
- 安裝RoboWare Studio
- 單元測試一
- 第二章 ROS文件系統
- Catkin編譯系統
- Catkin工作空間
- Package軟件包
- CMakeLists.txt
- package.xml
- Metapacakge軟件元包
- 其他常見文件類型
- 單元測試二
- 第三章 ROS通信架構(一)
- Node & Master
- Launch文件
- Topic
- Msg
- 常見msg類型
- 單元測試三
- 第四章 ROS通信架構(二)
- Service
- Srv
- Parameter server
- Action
- 常見srv類型
- 常見action類型
- 單元測試四
- 第五章 常用工具
- Gazebo
- RViz
- Rqt
- Rosbag
- Rosbridge
- moveit!
- 單元測試五
- 第六章 roscpp
- Client Library與roscpp
- 節點初始、關閉與NodeHandle
- Topic in roscpp
- Service in roscpp
- Param in roscpp
- 時鐘
- 日志與異常
- 第七章 rospy
- Rospy與主要接口
- Topic in rospy
- Service in rospy
- Param與Time
- 第八章 TF與URDF
- 認識TF
- TF消息
- tf in c++
- tf in python
- 統一機器人描述格式
- 附錄:TF數學基礎
- 三維空間剛體運動---旋轉矩陣
- 三維空間剛體運動---歐拉角
- 三維空間剛體運動---四元數
- 第九章 SLAM
- 地圖
- Gmapping
- Karto
- Hector
- 第十章 Navigation
- Navigation Stack
- move_base
- costmap
- Map_server & Amcl
- 附錄:Navigation工具包說明
- amcl
- local_base_planner
- carrot_planner
- clear_costmap_recovery
- costmap_2d
- dwa_local_planner
- fake_localization
- global_planner
- map_server
- move_base_msg
- move_base
- move_slow_and_clear
- navfn
- nav_core
- robot_pose_ekf
- rotate_recovery