// it's for Latex

pages

[SLAM] #12. Paper reading : Hector Open Source Modules for Autonomous Mapping and Navigation with Rescue Robots

지금까지는 SLAM을 실험하기 위한 gazebo 실험환경을 구성하는 작업을 하였다.
그리고 이 시점에 와서 slam에 대한 이해가 필요하다는 생각이 절실히 들었다.
내가 사용하고자 하는 package는 hector_slam 이다. hector team 에서 robocup rescue complite의 참가를 목적으로 개발한 open source mudule이다.
나는 이 hector_slam이 어떻게 동작하는지 알고자 했다.
그래야 제대로 쓸 수 있을테니 말이다.
그래서 나는 hector slam에 대한 paper인 "Hector Open Source Modules for Autonomous Mapping and Navigation with Rescue Robots"를 읽고 내용을 정리한다.


SLAM 작업환경 [Labtop]
OS : Ubuntu 16.06 LTS
ROS version : Kinetic
Compiler : catkin
Depth Camera : Intel realsene D435

Simulation 작업환경 [Desktop]
OS: Ubuntu 14.04 LTS
ROS version : Indigo
Compiler : catkin
Depth Camera : Kinect Sensor


먼저 hector_slam은 다음과 같은 구조로 되어 있다.


node로 보자면 "hector_mapping", "hector_map_server", "hector_geotiff" 그리고 "hector_trajectory_server" 부분으로 되어있다.

paper에서는 모바일 로봇을 이용하여 slam 및 navigation을 진행하였고 해당 mobile robot이 pose estimation을 하기 위해서 "hector_pose_estimation" node 또한 사용했지만 우리는 이미 imu, gps sensor 등의 값을 이용하여 위치추정을 해내는 drone인 erle-copter를 갖고있으므로 "hector_pose_estimation" node를 실행시킬 필요는 없겠다.

하지만 여기서 걱정이 하나 있다.
erle-copter는 이미 /tf topic과 /mavros/imu/data를 publish 하고 있는데, 면
위 Diagram을 보면

(1) imu 값과 mapping에서 얻어낸 2D pose 값을 이용하여 pose estimation을 실시하고 이후에 tf topic을 publish 

(2) (1)에서 publish된 tf topic과 LRF sensor로부터 얻어낸 laser scan 값을 이용하여 2D map을 그리고 2D pose 값을 publish

위 두 과정을 반복하게 되는데, 
내 경우에는 drone이 일방적으로 /tf 와 /mavros/imu/data topic을 publish하고 있기 때문에 내 drone과 paper의 mobile robot이 pose_estimation 방법이 다르게 된다.

하지만 실제로 SLAM을 진행했을 때, 큰 문제가 없으므로 그냥 진행해도 될 듯 하다.

앞서 이야기 했듯이 hector_slam은 총 4개의 노드로 구성되는데
"hector_mapping", "hector_map_server", "hector_geotiff" 그리고 "hector_trajectory_server"

이 중 내가 필요한 부분은 위 Diagram에서 가져오자면 왼쪽 위의 3개 box "mapping" + "elevation mapping" = "cost map" 부분이다.
나머지 부분은 실질적으로는 navigation과 관련된 부분이라 지금 당장 볼 필요는 없다.

각각의 내용은 다음과 같다.

1. mapping : hector_mapping

2D LRF sensor를 이용한 2차원 평면에서의 SLAM을 하는 node이다.

2. elevation mapping : hector_elevation_mapping

RGBD-camera를 이용해서 3D point cloud data를 획득해 2D grid map에 height data를 갖는 2.5D map을 만든다.

3. cost map : hector_costmap

1번과 2번의 map을 합쳐서 1번의 2D occupancy grid map에 2번의 2.5D elevation map을 합치게 된다.







사실 마음 같아서는 위의 3가지 mapping들이 어떻게 이루어지는지 굉장히 자세하게 공부하고 싶고, 해야한다고 생각한다. 하지만 지금 당장은 존재하는 package들을 이용해 구현부터 해보자. 이후에 공부도 해보고 내가 실제로 구현도 해보자.





댓글 없음:

댓글 쓰기