> For the complete documentation index, see [llms.txt](https://omorobot.gitbook.io/manual/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://omorobot.gitbook.io/manual/product/omo-r1/ros-1/slam.md).

# SLAM 네비게이션

![OMO R1 + G2 lidar](/files/-MiU4SbyrQiuzRk2yPg5)

### Dependency Package 설치

SLAM에 필요한 패키지들을 설치합니다.&#x20;

```
$ sudo apt-get install ros-melodic-tf ros-melodic-joy \
ros-melodic-teleop-twist-joy \
ros-melodic-teleop-twist-keyboard \
ros-melodic-laser-proc ros-melodic-rgbd-launch \
ros-melodic-depthimage-to-laserscan \
ros-melodic-rosserial-arduino ros-melodic-rosserial-python \
ros-melodic-rosserial-server ros-melodic-rosserial-client \
ros-melodic-rosserial-msgs ros-melodic-amcl \
ros-melodic-map-server ros-melodic-move-base \
ros-melodic-urdf ros-melodic-xacro ros-melodic-usb-cam \
ros-melodic-compressed-image-transport \
ros-melodic-rqt-image-view ros-melodic-gmapping \
ros-melodic-navigation ros-melodic-interactive-markers \
ros-melodic-ar-track-alvar ros-melodic-ar-track-alvar-msgs
```

### OMO\_R1 패키지 설치

catkin\_ws의 src 폴더로 이동한 다음 <https://github.com/omorobot/omo_r1.git> 의 코드를 git clone하여 복사합니다. 만약 기존에 다운로드하였다면 git pull 로 다시한번 최신버전으로 업데이트합니다.

```
$ cd ~/catkin_ws/src
$ git clone https://github.com/omorobot/omo_r1.git
```

빌드하기

```
$ cd ..
$ catkin_make 또는 catkin build
```

### G2 Lidar 패키지 설치

catkin\_ws의 src 폴더 안에 기존에 설치된 YD라이다 패키지가 있으면 삭제하고 YDLIDAR 공식 ROS지원 페이지에서 패키지를 다운로드하고 빌드합니다.

{% embed url="<https://github.com/YDLIDAR/ydlidar_ros>" %}

```
$ cd ~/catkin_ws/src
$ git clone https://github.com/YDLIDAR/ydlidar_ros.git
$ cd ..
$ catkin_make 또는 catkin build

```

### ROS SLAM으로 맵 만들기

이제 좌측 상단의 roscore만 남기고 ctrl+c 키를 눌러 실행중인 패키지를 모두 종료합니다.\
터미널을 하나 더 띄워서 ROBOT PC에 접속합니다.

![](/files/-MiU6pl09592s06sqaPq)

좌측 상단부터 HOST PC의 roscore 우측 상단: ROBOT PC

먼저 **ROBOT PC**터미널(우측 상단)에서 로봇을 G2라이다와 함께 실행하기 위해 다음을 입력합니다.

```
$ roslaunch omo_r1_bringup omo_r1_robot_G2.launch
```

다른 **ROBOT PC** 터미널(우측 하단)에서 ROS SLAM 을 실행합니다.

```
$ roslaunch omo_r1_slam omo_r1_slam_G2.launch
```

이제 **HOST PC** 터미널에서 (좌측 하단) ROS SLAM rviz를 엽니다.

```
$ roslaunch omo_r1_slam omo_r1_slam_rviz.launch
```

이제 터미널은 다음과 같은 상태가 되고

![](/files/-MiU6tKQZqhqFX2eUf6e)

RVIZ 환경에서 로봇이 나타난다.

![](/files/-MiU6v_I36Fd0c5ekNfm)

HOST PC 터미널을 하나 더 띄우고 다음을 입력하여 키보드로 조작합니다.

```
$ roslaunch omo_r1_teleop omo_r1_teleop_key.launch
```

이제 키보드 명령으로 천천히 움직이면서 맵을 생성합니다.

{% hint style="info" %}
너무 빠르게 움직이는 경우 아래 그림과 같이 맵이 이상하게 그려지거나 로봇의 위치가 엉뚱한곳으로 이동하게 되므로 주의하여 조작합니다.
{% endhint %}

![](/files/-MiU6yQqAUSKZ_H_uGbT)

어느정도 맵이 완성되면\
HOST PC에서 teleop keyboard를 중단시키고

아래 명령어를 입력하여 map 파일을 저장합니다.

```
$ rosrun map_server map_saver -f map 
```

그러면 내 PC에 map.pgm 파일과 map.yaml 파일이 생성됩니다.

이제 이렇게 생성된 파일을 omo\_r1/omo\_r1\_navigation/maps 에 복사합니다.

```
$ cp map.pgm map.yaml catkin_ws/src/omo_r1/omo_r1_navigation/maps
```

터미널에서 모든 패키지를 종료한다. roscore도 다시 시작해봅니다.

### ROS SLAM Navigation 실행

다시 순서대로 robot을 실행하고

```
$ roslaunch omo_r1_bringup omo_r1_robot_G2.launch
```

HOST PC에서 omo\_*r1*\_navigation\_G2.launch를 엽니다

```
$ roslaunch omo_r1_navigation omo_r1_navigation_G2.launch
```

또 HOST PC에서 navigation\_rviz.launch를 엽니다.

```
$ roslaunch omo_r1_navigation omo_r1_navigation_rviz.launch
```

이제 RVIZ에 로봇과 맵이 나타납니다.

![](/files/-MiU7v5vqXNnyNdt4N93)

이제 상단 메뉴에서 2D Pose Estimate 버튼을 누르고 맵에서 로봇이 있을것으로 추정되는 위치와 방향으로 커서를 Drag 합니다.

![](/files/-MiU7yhh5EbK9Cdzo2iu)

다음으로 2D Nav Goal을 선택하여 로봇의 목표 위치와 방향을 설정합니다.

![](/files/-MiU84cezwCodgNFSWUr)

맵이 어느정도 일치하고 Planning이 가능하면 로봇이 이동하기 시작합니다.
