// it's for Latex

pages

[SLAM and Multi point navigation using Turtlebot3 simulation] #02. Hector SLAM with Turtlebot3 & Making Gazebo World

Turtlebot3의 매뉴얼에는 Default로 gmapping SLAM에 대한 내용이 있다.
하지만 본인이 이번에 사용하고자 하는 SLAM 방법은 Hector SLAM 이므로,
Hector SLAM을 진행해보자.


작업환경

OS : Ubuntu 16.04
ROS : Kinetic



1. Install Hector SLAM


필자의 게시글 중 하나인 [SLAM] #11. How to 2D LRF SLAM with erle-copter/ 에서 Hector SLAM 설치에 대한 내용을 참조하여, 다음 명령어를 통해 Hector SLAM Package 설치를 진행하자.

$ cd ~/catkin_ws/src
$ git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam
$ cd ~/catkin_ws && catkin_make

2. Launch Hector SLAM with Turtlebot3 simulation


다음 Turtlebot3 simulation 링크를 참조하여 Hector SLAM을 진행해보자.

# Termianl_1
$ export TURTLEBOT3_MODEL=waffle_pi
$ roslaunch turtlebot3_gazebo turtlebot3_house.launch

# Termianl_2
$ export TURTLEBOT3_MODEL=waffle_pi
$ roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=hector

# Termianl_3
$ export TURTLEBOT3_MODEL=waffle_pi
$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch


제대로 실행 되었다면 다음과 같은 결과를 볼 수 있다.



3. Download all Gazebo Model


simulation 과정에서 기본적으로 제공된 환경이 아닌 내가 원하는 환경을 만들 필요가 있다.
이를 위해서 먼저 모든 Gazebo Model 들을 다운받아보자.
다음 링크를 참조하자.
http://machineawakening.blogspot.com/2015/05/how-to-download-all-gazebo-models.html )

명령어는 다음과 같다.


# Making Shell Script for Download All Gazebo model

$ cd ~
$ nano download_gazebo_model.sh

# copy and paste codes below

==================================================================

#!/bin/sh

# Download all model archive files
wget -l 2 -nc -r "http://models.gazebosim.org/" --accept gz

# This is the folder into which wget downloads the model archives
cd "models.gazebosim.org"

# Extract all model archives
for i in *
do
  tar -zvxf "$i/model.tar.gz"
done

# Copy extracted files to the local model folder
cp -vfR * "$HOME/.gazebo/models/"

==================================================================

# give authority to script file

$  chmod +x download_gazebo_model.sh

# execute script

$ ./download_gazebo_model.sh


다음과 같이 model들이 생성된 것을 확인할 수 있다.



4. Making Gazebo World


world를 만들기 위해서 Gazebo를 켜보자.

# Open Gazebo
$ gazebo

그리고 원하는 Model 들을 가져와 world를 만든 뒤
File -> Save as
를 눌러 name_of_your_world.world 로 이름을 정한 뒤 파일을 저장한다.

그리고 저장된 파일을 열어본다.

# Open saved gazebo world
$ gazebo path_of_your_file/name_of_your_world.world

다음과 같이 저장된 world를 확인할 수 있다.



5. Making Launch file


이제 우리가 만든 world에 turtlebot3를 불러오기 위해 launch 파일을 만들어보자.

~/catkin_ws/src/turtlebot3_simulations/turtlebot3_gazebo/launch

위 경로에 "turtlebot3_caffe.launch" 라는 이름의 새로운 파일을 만든다.

그리고 우리가 만든 world에 turtlebot3를 넣기위한 launch 파일을 만든다.

$ cd ~/catkin_ws/src/turtlebot3_simulations/turtlebot3_gazebo/launch

$ nano turtlebot3_caffe.launch

다음 내용을 기입한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<launch>
  <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
  <arg name="x_pos" default="-3.0"/>
  <arg name="y_pos" default="1.0"/>
  <arg name="z_pos" default="0.0"/>
  <include file="$(find gazebo_ros)/launch/empty_world.launch">
    <arg name="world_name" value="$(find turtlebot3_gazebo)/worlds/turtlebot3_caffe.world"/>
    <arg name="paused" value="false"/>
    <arg name="use_sim_time" value="true"/>
    <arg name="gui" value="true"/>
    <arg name="headless" value="false"/>
    <arg name="debug" value="false"/>
  </include>
  <param name="robot_description" command="$(find xacro)/xacro --inorder $(find turtlebot3_description)/urdf/turtlebot3_$(arg model).urdf.xacro" />
  <node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-urdf -model turtlebot3 -x $(arg x_pos) -y $(arg y_pos) -z $(arg z_pos) -param robot_description" />
</launch>
cs

저장 후 실행해보자.

$ export TURTLEBOT3_MODEL=waffle_pi
$ roslaunch turtlebot3_gazebo turtlebot3_.launch

다음과 같은 모습을 볼 수 있다.



turtlebot3가 world에 추가된 것을 확인할 수 있다.


6. SLAM with created World


이제 우리가 만든 world를 이용해 SLAM을 진행해보자.

# Termianl_1
$ export TURTLEBOT3_MODEL=waffle_pi
$ roslaunch turtlebot3_gazebo turtlebot3_caffe.launch

# Termianl_2
$ export TURTLEBOT3_MODEL=waffle_pi
$ roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=hector

# Termianl_3
$ export TURTLEBOT3_MODEL=waffle_pi
$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
































































댓글 없음:

댓글 쓰기