SLAM 네비게이션

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


OMO R1 + G2 lidar

Dependency Package 설치 #

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

$ 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지원 페이지에서 패키지를 다운로드하고 빌드합니다.

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

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

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

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

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

$ roslaunch omo_r1_teleop omo_r1_teleop_key.launch

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

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

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

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

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

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