# 9.4 Hector
![hecotor](https://img.kancloud.cn/b9/c2/b9c276ccaab1520a7ddee6e0b336d439_1181x931.png)
Hector SLAM效果
## 9.4.1 Hector SLAM计算图
Hector SLAM算法不同于前面两种算法,Hector只需要激光雷达数据,而不需要里程计数据。这种算法比较适合手持式的激光雷达,并且对激光雷达的扫描频率有一定要求。
Hector算法的效果不如Gmapping、Karto,因为它仅用到激光雷达信息。这样建图与定位的依据就不如多传感器结合的效果好。但Hector适合手持移动或者本身就没有里程计的机器人使用。
Hector的计算图,如下所示
![slam_gmapping](https://img.kancloud.cn/ce/81/ce81a24268ba8eb0d90670648c72ebdf_1829x948.jpg)
位于中心的节点叫作`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算法演示效果图如下:
![](https://img.kancloud.cn/5a/6c/5a6c42f22c93898b2ffebd26ae5e115a_925x894.png)
- 前言
- 第一章 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