> 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 PRO 버전은 G2 라이다가 설치되어 공급됩니다. 이 센서를 가지고 SLAM 네비게이션을 수행하는 방법을 정리하였습니다.

![OMO R1 + G2 lidar](https://491696592-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MK7gxD_6rkqAewni4tk%2F-MiU1GWgx5ZS0OccKiOP%2F-MiU4SbyrQiuzRk2yPg5%2FR1%20thumb.38_Head.png?alt=media\&token=dc369fa7-3a19-40ea-9b89-01d320101d0a)

### 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에 접속합니다.

![](https://491696592-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MK7gxD_6rkqAewni4tk%2F-MiU1GWgx5ZS0OccKiOP%2F-MiU6pl09592s06sqaPq%2Fimage.png?alt=media\&token=5db087f9-5e0d-45c7-9639-13b65a2b7bb8)

좌측 상단부터 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
```

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

![](https://491696592-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MK7gxD_6rkqAewni4tk%2F-MiU1GWgx5ZS0OccKiOP%2F-MiU6tKQZqhqFX2eUf6e%2Fimage.png?alt=media\&token=6b6cd159-2bbf-486f-b16e-70b81e467a1b)

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

![](https://491696592-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MK7gxD_6rkqAewni4tk%2F-MiU1GWgx5ZS0OccKiOP%2F-MiU6v_I36Fd0c5ekNfm%2Fimage.png?alt=media\&token=b95f2a52-007a-4993-bcc2-16732fc44847)

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

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

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

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

![](https://491696592-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MK7gxD_6rkqAewni4tk%2F-MiU1GWgx5ZS0OccKiOP%2F-MiU6yQqAUSKZ_H_uGbT%2Fimage.png?alt=media\&token=be6611d6-8e41-4e9b-9dac-d250f2a2c560)

어느정도 맵이 완성되면\
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에 로봇과 맵이 나타납니다.

![](https://491696592-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MK7gxD_6rkqAewni4tk%2F-MiU1GWgx5ZS0OccKiOP%2F-MiU7v5vqXNnyNdt4N93%2Fimage.png?alt=media\&token=27181b91-8671-45ee-8514-3a094c0739dc)

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

![](https://491696592-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MK7gxD_6rkqAewni4tk%2F-MiU1GWgx5ZS0OccKiOP%2F-MiU7yhh5EbK9Cdzo2iu%2Fimage.png?alt=media\&token=2a0b1353-44ad-44cb-82e6-e74e38215e52)

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

![](https://491696592-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MK7gxD_6rkqAewni4tk%2F-MiU1GWgx5ZS0OccKiOP%2F-MiU84cezwCodgNFSWUr%2Fimage.png?alt=media\&token=c6a927f7-0700-4499-a3ec-aebdba03f5ea)

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