# SLAM 해보기2

{% hint style="info" %}
아래 기어비 수정은 정식 출시 전, 베타 유저들만 진행하시면 됩니다.
{% endhint %}

## 기어비 수정

내 PC와 로봇의 터미널 모두를 omo\_r1mini 폴더까지 이동한 후

![](/files/-MTivzHpfQUn3N6tpBw5)

git pull로 당겨주세요(^^).

* 기존에 다운 받은 패키지들을 업데이트하기 위함\~

![](/files/-MTiwKUlGORBR40XlpaW)

그 후, 다음 과정을 수행하면 됩니다.

* 내 PC에서 roscore
* 로봇에서 roslaunch omo\_r1min&#x69;*\_*&#x62;ringup om&#x6F;*\_*&#x72;1mini\_motor\_setting.launch
  * 이 때 로봇 모터가 자동으로 회전하기 때문에, 로봇 본체 아래에 무언가 받쳐두는 방식 등으로 로봇 바퀴를 지면에서 띄워 두어야 합니다.
* 모터의 동작이 끝나면 로봇을 재부팅 합니다.
  * 참고 : <https://omorobot.gitbook.io/manual/omo-r1/omo-r1mini/ros/undefined>

## Previous Story

이제 로봇을 장애물이 없는 적당한 곳에 위치 시키고,

![](/files/-MTiwnZoTtnZJayu-Bhe)

내 PC에서는 roscore를, 로봇에서는

* 까만색 HLDS 라이다를 가진 분들은 omo\_r1mini\_robot\_hlds.launch
* 파란색 YD 라이다를 가진 분들은 omo\_r1mini\_robot.launch

를 실행합니다.

![](/files/-MTiwugICzyrwlgyzxSn)

혹시 화면에 데이터가 몇 개 나오다가 멈추면

![](/files/-MTixBXD-xxSVXxwUxzY)

ctrl + C로 중단하고

![](/files/-MTixGkPr20Oags2XqPU)

다시 omo\_r1mini\_robot\_hlds.launch를 실행해줍니다.

* 파란색 ydlidar를 가지고 있는 분들은 omo\_r1mini\_robot.launch 실행해주세요.

![](/files/-MTixLlXD6CBwSDQkIKd)

이제 로봇에서 omo\_r1mini\_slam.launch를 실행하고

![](/files/-MTixU5YWcansp9ZsPgt)

내 PC에서 omo\_r1mini\_slam\_rviz.launch를 실행해주면

![](/files/-MTiy1pEc48kbVQrnUaW)

rviz에서 이런 화면이 나타나는걸 볼 수 있습니다.

![](/files/-MTiy7T2Pk2VJdqGiZeg)

이 상태에서 내 PC에서 새 터미널을 띄우고,

![](/files/-MTiyC1SSg5U0eHjandE)

omo\_r1mini\_teleop\_key.launch로

![](/files/-MTiyHU7bGAcC8fjFy78)

로봇을 조종해서 맵을 넓혀주세요.

![](/files/-MTiyJjUuChrdNHGTWMy)

얼추 다 만들어 졌다면 teleop을 중단한 뒤,

![](/files/-MTiyPEQwo8R9HFvnrEs)

로봇에 ssh로 접속하고

![](/files/-MTiyVFJINiWXOJTI0vY)

만든 map을 저장합니다.

![](/files/-MTiy_Q1Akzd9zUnMBtq)

그러면 이렇게 map으로 시작하는 파일이 2개 생성됩니다.

![](/files/-MTiyf0d3Bkgm39G-Qrb)

아래 명령으로 해당 경로에 복사해주세요\~

![](/files/-MTiygyhGNOGkuzsZ2b8)

실행 중이던 내 PC와 로봇의 터미널을 전부 종료하고\~

![](/files/-MTiylXa1JDMHRYZ7D-Y)

내 PC와 로봇에 각각 이렇게 실행합니다.

* 프롬프트 이름을 잘 확인하세요.\
  여기선 pw = 내 PC / r1mini = 로봇 입니다.

![](/files/-MTiyx3zg_PR_6Dn8IL4)

그 후에 뜨는 이런 화면에서

![](/files/-MTiz04V1NwN9SaOdkvT)

2D pose estimation으로 자기 위치를 잡아주시구요.

![](/files/-MTiz2jC7XBf-Uvq2uql)

잘 맞추었다면

![](/files/-MTizCCQ56y5KH-k2hxP)

가고 싶은 곳과 자세를 지정하면 됩니다.

![](/files/-MTizPccnaGMubZSN_m3)

이렇게 (동영상)

{% embed url="<https://pinkwink.atlassian.net/wiki/download/attachments/1078460436/%20screencast%202021-02-16%2019-13-54.mp4?api=v2>" %}

여러 번 테스트\~

![](/files/-MTizc6lL5_9aStl70IL)

## 그럼 좀 다른 방식으로 가볼까?

amcl\_pose 토픽을 열람해봅시다.

![](/files/-MTizjwW4DpyWjg1RvMe)

현재 좌표와 자세가 나오는데요.

![](/files/-MTizoOpDTWPwpdX-1Qi)

지난번 설치한 jupyter notebook을 실행하고,

![](/files/-MTiztcIxydeBByz2jwD)

화면도 적당히 배치하고,

![](/files/-MTj-136G_KyXGnVrget)

새 파일을 만들고,

* Jupyter 다루기 참고
* 이미 실행한 파일이 있을 경우, 메뉴의 Kernel - Restart & Clear Output 선

![](/files/-MTj-3p-EeCSBz0VwqJd)

필요한 모듈을 import 하고,

```python
import rospy
import actionlib
from move_base_msgs.msg import MoveBaseAction, MoveBaseGoal
from math import radians, degrees
from actionlib_msgs.msg import *
from geometry_msgs.msg import Point
```

![](/files/-MTj-BaE8DFhKuCz4Lm0)

node를 초기화하고,

```python
rospy.init_node('map_navigation', anonymous=False)
ac = actionlib.SimpleActionClient("move_base", MoveBaseAction)
```

![](/files/-MTj-E0Jr-GpM9tw9NN1)

현재 위치를 읽어줍니다.

저는 이제 현재 위치에서 x 방향으로 한 20cm 정도 앞으로 가는 것을 목표로 잡았습니다.

![](/files/-MTj-KeLacXlL7HTr6yS)

가야 할 위치를 지정해주고요.

```python
goal = MoveBaseGoal()
goal.target_pose.header.frame_id = "map"
goal.target_pose.header.stamp = rospy.Time.now()
```

```
goal.target_pose.pose.position = Point(0.45, -0.777, 0)
goal.target_pose.pose.orientation.x = 0.0
goal.target_pose.pose.orientation.y = 0.0
goal.target_pose.pose.orientation.z = 0.0
goal.target_pose.pose.orientation.w = 0.0
```

![](/files/-MTj-MYA8fNHi5OzUk0r)

아래처럼 시작하라는 명령을 줍니다.

```python
ac.send_goal(goal)
```

![](/files/-MTj-Y9bd9wC7WLYbYaE)

동영상으로 확인하면 이렇습니다 ^^

<https://pinkwink.atlassian.net/wiki/download/attachments/1078460436/%20screencast%202021-02-16%2019-39-27.mp4?api=v2>

그런데 약간 삐뚤어지네요?

![](/files/-MTj-_O9zNxBanzYR5M-)

움직이고 싶은 각도를 결정하고 quaternion으로 변경해볼까요.

![](/files/-MTj-o1BED70-0FwKAMy)

변경했습니다.

![](/files/-MTj-pxT7HoDpMhb449x)

그러면 회전만 일어나네요^^

## 추가 사항

하나 덧붙일 것은, 회전 중심이 여기에 위치 하는 줄 알았는데

![](/files/-MUVpSMuaXeN0jEOYF7q)

로봇의 무게로 눌러져서 아래 이미지가 회전 중심이 됩니다. ㅠㅠ

![](/files/-MUVpesCPyy_pnE7GkGt)

혹시 라이다에 의해 그려지는 지도가 회전하는 문제가 발생하면, 튜닝 하실 때 휠 사이 간격을 138mm (최대 150mm) 로 바꾸어 보시는 것도 하나의 방법이 될 것 같습니다.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://omorobot.gitbook.io/manual/product/omo-r1mini/ros/ros1-melodic/slam2.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
