본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
오늘은 새로운 로봇으로 환경을 구축하고
cartographer로 mapping을 진행했다.
[오늘의 수강 영상]
[오늘의 실습]
오늘부터는 ADLINK Technology 회사에서 만든
NeuronBot을 사용하여 실습을 진행하였다.
오늘은 cartographer를 본격적으로 사용하기 전에
환경을 구축하는 거에 치중하고 마지막에 cartographer로
mapping을 진행해보았다.
로봇 환경 설정을 위해 필요한 요소들을 설치해 줬다.
$ sudo apt update && sudo apt install -y \
build-essential \
cmake \
git \
libbullet-dev \
python3-colcon-common-extensions \
python3-flake8 \
python3-pip \
python3-pytest-cov \
python3-rosdep \
python3-setuptools \
python3-vcstool \
openssh-server \
wget
그 후, nav2_ws라는 워크스페이스를 새롭게 생성해 준 후에
필요한 리소스들을 가져오고
$ wget https://raw.githubusercontent.com/Adlink-ROS/neuronbot2_ros2.repos/humble/neuronbot2_ros2.repos
$ vcs import src < neuronbot2_ros2.repos
아래 명령어를 사용하여 워크스페이스 안의
모든 의존성 패키지들을 설치해 주었다.
$ rosdep install --from-paths src --ignore-src -r -y --rosdistro humble
그 후 워크스페이스에 가서 빌드를 진행해 주었다.
$ colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
먼저 간단하게 시뮬레이션 환경이 제대로 생성되었는지
환경을 열어보고 간단하게 움직여보았다.
$ ros2 launch neuronbot2_gazebo neuronbot2_world.launch.py
시뮬레이션을 처음 실행할 때
계속해서 Gazebo가 실행되지 않는 상황이 발생하였었다.
이를 해결하기 위해 그래서 이것저것 찾아보던 중
Gazebo에서 GUI 렌더링을 시도하는 중, 카메라나 렌더링 관련 오브젝트를
제대로 초기화하지 못했을 때 발생하는 아래와 같은 에러가 발생한 걸 알게 되었다.
gzclient: /usr/include/boost/smart_ptr/shared_ptr.hpp:728: Assertion `px != 0' failed.
이를 해결하기 위해 찾아보니 Gazebo 업데이트를 진행하면
해결될 수 있을 것 같아서 업데이트를 진행하였더니
이 문제가 해결되었다.
학교 다닐 때도 버전문제를 많이 겪었고
정말 싫더라도 어쩔 수 없이 마주하는 문제이기 때문에
항상 이 버전문제를 염두에 두고 앞으로 이러한 문제를
마주치더라도 잘 해결해 봐야겠다.
시뮬레이션 환경에서 기본으로 주어지는 환경이 두 개가 있다.
Mememan World와 Phenix World이다.
시뮬레이션을 실행시키면 가장 먼저
아래와 같은 화면이 나오게 된다.
이 화면이 Mememan world인데
여기서 Phenix World로 바꾸고 싶다면
neuronbot2_world.launch.py의 28번째 줄의 파일을
phenix_world.model로 수정하여 world를 바꿀 수 있습니다.
이렇게 바꾸면 아래와 같이 바뀌는 것을 볼 수 있다.
이렇게 확인을 해보면서 로봇이 시뮬레이션에서는
잘 작동하는 것을 확인하였다.
다음으로 이제 Cartographer를 통해 map을 그려볼 것이다.
근데 주어진 환경 말고 서점환경을 따로 불러와서
그 위에 로봇을 불러와 map을 제작해 보겠다.
Cartographer를 수행하기 위해서는
Launch 파일과 Lua 파일, Rviz 파일이 필요하고
이 파일들에서 필요한 정보들을 수정해줘야 한다.
먼저 Launch 파일에서 cartographer_node의 arguments로
설정파일의 경로(configuration_directory,13번 줄)와
설정 파일의 이름(configuration_basename,15번 줄)을 정의한다.
Lua 파일과 Rviz파일은 선생님이 사전에 주신 파일들을 사용하였고
아래 위치가 파일들이 있었다.
다음으로는 서점환경을 불러오기 위해서
git clone을 진행하였다.
$ git clone https://github.com/aws-robotics/aws-robomaker-bookstore-world.git -b ros2
내려받은 후 aws_robomaker_bookstore_world 패키지만 따로 빌드해 준다.
$ colcon build --symlink-install --packages-select aws_robomaker_bookstore_world
시뮬레이션이 잘 동작하는지 확인하기 위해
아래 명령어를 실행했다.
$ ros2 launch aws_robomaker_bookstore_world view_bookstore.launch.py
위와 같이 성공적으로 불러와지긴 하지만 그래픽카드가 안 좋은 건지
그래픽이 잘 안 불러와지고 확대했을 때만 제대로 보이는 것을 확인할 수 있었다.
이 문제는 조금 더 찾아봐야 할 것 같다ㅠㅠ
그래도 환경을 보는 것에는 문제가 되지 않아
계속 진행해 보았다.
우리가 서점환경에 로봇을 spawn 하기 위해서는
~/nav2_ws/src/neuronbot2/neuronbot2_gazebo/launch/
neuronbot2_world.launch.py를 아래와 같이 수정해줘야 한다.
15번 줄에 우리가 사용하는 모델 경로를 설정해 준 후
19번 줄에서 aws_robomaker_bookstore_world 패키지의
models 디렉터리 안에 있는 모델들을 Gazebo가 읽을 수 있도록
환경변수에 추가해 준다.
또한, 29번 줄에 directory에도 패키지를 잘 설정한 후
31번 줄에 우리가 사용하는 world를 잘 적어주면
이제 서점 환경에서 로봇을 spawn 할 수 있게 된다.
이 단계에서 29번 줄에 경로를 잘 설정하지 않으면
로봇만 불러지고 환경이 불러와지지 않는
문제가 발생한다.
잘 확인하고 진행해야 저와 같은
불상사를 막을 수 있습니다..
그 후 아래 명령어를 입력하여 로봇이 잘 Spawn 되는지 확인한다.
$ ros2 launch neuronbot2_gazebo neuronbot2_world.launch.py
Spawn이 잘 되는 것을 확인한 후
이제 Cartographer를 통해 mapping을 수행해 보았다.
아래 명령어를 입력하여 cartographer를 실행한 후,
$ ros2 launch neuronbot2_slam cartographer_launch.py open_rviz:=true use_sim_time:=true
telep_twist_keyboard를 수행하여 로봇을 이동하며
아래 동영상과 같이 mapping을 진행하였다.
오늘 이렇게 cartographer를 통해 map을 그려보았다.
중간중간 진행하면서 오류도 해결하면서
성공적으로 map을 작성할 수 있게 되어서
너무 뿌듯한 마음이 든다.
#패스트캠퍼스 #직장인자기계발 #직장인공부 #환급챌린지 #패스트캠퍼스후기 #오공완
커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스
성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.
fastcampus.co.kr