Previous Story #

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

내 PC에서는 roscore를, 로봇에서는 robot을 실행합니다.

hostpc:~$ roscore
r1mini:~$ roslaunch omo_r1mini_bringup omo_r1mini_robot.launch
  • 까만색 HLDS 라이다를 가진 분들은 omo_r1mini_robot_hlds.launch 를 실행합니다.

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

ctrl + C로 중단하고

다시 omo_r1mini_robot_hlds.launch를 실행해줍니다.

  • 파란색 ydlidar를 가지고 있는 분들은 omo_r1mini_robot.launch 실행해주세요.

이제 로봇에서는 omo_r1mini_slam.launch를 실행하고

r1mini:~$ roslaunch omo_r1mini_slam omo_r1mini_slam.launch

내 PC에서는 omo_r1mini_slam_rviz.launch를 실행합니다.

hostpc:~$ roslaunch omo_r1mini_slam omo_r1mini_slam_rviz.launch

그러면 아래와 같은 rviz화면이 나타납니다.

이제 로봇을 조종하기 위해 HOST PC에서 omo_r1mini_teleop_key.launch 를 실행합니다.

hostpc:~$ roslaunch omo_r1mini_teleop omo_r1mini_teleop_key.launch

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

맵이 어느정도 완성이 되면 로봇에 ssh로 접속하여 map을 저장합니다.

다음과 같이 입력합니다.

r1mini:~$ rosrun map_server map_saver -f map

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

cp 명령으로 omo_r1mini_navigation/maps/ 폴더에 복사해주세요~

r1mini:~$ cp map.* ~/catkin_ws/src/omo_r1mini/omo_r1mini_navigation/maps/

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

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

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

그 후에 뜨는 이런 화면에서

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

잘 맞추었다면

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

이렇게 (동영상

)https://pinkwink.atlassian.net/wiki/download/attachments/1078460436/%20screencast%202021-02-16%2019-13-54.mp4?api=v2pinkwink.atlassian.net

여러 번 테스트~

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

amcl_pose 토픽을 열람해봅시다.

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

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

화면도 적당히 배치하고,

새 파일을 만들고,

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

필요한 모듈을 import 하고,1import rospy2import actionlib3from move_base_msgs.msg import MoveBaseAction, MoveBaseGoal4from math import radians, degrees5from actionlib_msgs.msg import *6from geometry_msgs.msg import PointCopied!

node를 초기화하고,1rospy.init_node(‘map_navigation’, anonymous=False)2ac = actionlib.SimpleActionClient(“move_base”, MoveBaseAction)Copied!

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

가야 할 위치를 지정해주고요.1goal = MoveBaseGoal()2goal.target_pose.header.frame_id = “map”3goal.target_pose.header.stamp = rospy.Time.now()Copied!1goal.target_pose.pose.position = Point(0.45, -0.777, 0)2goal.target_pose.pose.orientation.x = 0.03goal.target_pose.pose.orientation.y = 0.04goal.target_pose.pose.orientation.z = 0.05goal.target_pose.pose.orientation.w = 0.0Copied!

아래처럼 시작하라는 명령을 줍니다.1ac.send_goal(goal)Copied!

동영상으로 확인하면 이렇습니다 ^^https://pinkwink.atlassian.net/wiki/download/attachments/1078460436/%20screencast%202021-02-16%2019-39-27.mp4?api=v2그런데 약간 삐뚤어지네요?

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

변경했습니다.

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

추가 사항 #

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

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

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