Navigation 2 SLAM (슬램 예제)
Unity Robotics
사용환경 : Ubuntu 20.04, Unity 2020.3.11f1, ROS2 (Foxy)
본 포스팅은 기존 Unity-Technologies/Unity-Robotics-Hub/Tutorials/Ros-Unity Intergration와 Unity-Technologies/Robotics-Nav2-SLAM-Example의 내용을 한글 번역 및 이해를 돕기위해 작성하였습니다.
목적
Navigation 2 SLAM Example은 유저들이 유니티를 SLAM 시뮬레이션 환경에서 사용할 수 있도록합니다. 본 포스팅은 유니티에서 제공하는 예제 환경 (Robotics-Warehouse)와 VIsualizations 패키지를 사용함으로써, 실 프로젝트에 Unity 가상환경과 SLAM을 적용하는 방법에 대해 학습합니다.
Configuring Your Development Environment
프로젝트 복사 (Clone The Project)
git clone --recurse-submodule git@github.com:Unity-Technologies/Robotics-Nav2-SLAM-Example.git
# 꼭! 단순하게 git clone 이 아니라 submodule까지 설치해주셔야합니다!
# 그렇지 않으면 package 오류로 진행이 불가능합니다.
위 코드를 통해 Unity-RObotics-Uub의 소스코드를 다운로드합니다. 아마 Ubuntu에서 기존 git을 사용하지 않은 분들에게는 다음과 같은 "Permission denied (publickey)"가 나타날 것입니다. 이미 ssh설정을 진행하신 분들은 이 부분은 스킵해주시길 바랍니다.
ssh-keygen -t rsa -C "[GIthub 이메일 주소]"
cat /home/[계정명]/.ssh/id_rsa.pub
여기까지 하셨다면 화면에 ssh-rsa ~~~~~~ 내용이 생성됩니다. 흰 글씨로 작성된 내용을 전체 복사해주시고, Github에 접속합니다. Profile - Setting - SSH and GPG Keys를 클릭합니다.
New SSH KEY를 누른 후 Title을 자유롭게 입력합니다, 이 후 복사한 내용을 KEY에 붙여넣으면 해당 오류를 해결할 수 있습니다.
Ros2 환경설정 (Set Up The ROS2 Environment)
다른 프로그램도 마찬가지지만 Unity Robotics 또한 docker 사용을 추천하고 있습니다. 따라서 docker를 미리 설치합니다.
sudo apt install docker.io
cd Robotics-Nav2-SLAM-Example/ros2_docker
sudo docker build -t unity-robotics:nav2-slam-example ./
# docker build -t == docker build --tag 'name:tag'
사용자의 이용환경마다 다르지만, 보통 10분 가량의 시간이 소요됩니다. 이 후 다음과 같이, Successfully ~~가 나타나면서, docker 설정이 끝납니다.
Setting Up The Unity Project
Unity Hub를 열고 ADD를 클릭합니다. 이 후 Robotics-Nav2-SLAM-Example 폴더를 선택 후 OK버튼을 누릅니다.
ADD 클릭
이 부분에서 폴더명이 조금 헷갈릴 수 있습니다. Robotics-Nav2-SLAM-Example 폴더가 아닌 하위 폴더를 설정하셔야 합니다. (경로 : ~/Robotics-Nav2-SLAM-Example/Nav2SLAMExampleProject)
현재 Linux 환경에서 버그가 있습니다. Add를 눌렀음에도, "Invaild Project Path" 에러가 나타날 경우
Unity Hub에서 NEW 버튼을 클릭하여 빈 프로젝트를 생성해주시길 바랍니다.
이 후 다시 Nav2SLAMExample폴더를 Add 해주시면 해결할 수 있습니다.
아래 Nav2SLAMExampleProject를 클릭합니다.
이 후 Unity가 실행되면 예제인 Warehouse를 다음과 같이 불러옵니다.
좌측 하단 Project-Assets-SimpleWarehouse를 더블 클릭합니다. 다음과 같이 Warehouse를 볼 수 있습니다.
상단의 Robotics를 눌러 ROS 셋팅을 진행합니다.
Protocol | ROS2 |
ROS IP Adress | 127.0.01 |
Show HUD | Enabled |
기본적으로 Docs에 적혀있는 바와 같이 셋팅되어 있습니다. 단, 만약 본인이 기존 ROS2 사용자이고 Docker가 아닌 ROS2 환경을 사용하실 경우 ROS IP Address를 본인 환경에 맞게 설정하셔야 합니다. 제 포스트를 따라오셨다면 127.0.01로 설정하시면 됩니다.
Running The Nav2 + Slam Toolbox Example
cd Desktop/Robotics-Nav2-SLAM-Example/ros2_docker
sudo docker run -it --rm -p 6080:80 -p 10000:10000 --shm-size=1024m unity-robotics:nav2-slam-example
위의 코드를 터미널에 입력합니다. 오류 또는 여러 메세지가 나타나게 됩니다.
이 후 다음과 같은 "sending remote command: ~~" 후 http://127.0.0.1:6080/를 주소창에 입력합니다.
이 후 좌측 하단부를 클릭한 후 - System Tools - LxTerminal을 클릭합니다.
ros2 launch unity_slam_example unity_slam_example.py
정상적으로 실행이 됐을 경우, 다음과 같이 Rviz가 실행됩니다.
아래와 같이 빨간 점으로 스캐닝이 된다면, 정상적으로 작동하는 것 입니다.
Rviz 상단에 있는 2D Goal Pose를 눌러봅니다. 이 후 좌클릭을 하면서 드래그 하면 Rviz와 Unity안의 Turtle bot이 연동되는 것을 확인할 수 있습니다.
댓글