지난 글에서 Docker 환경 기반 ROS2 foxy의 기본 예제인 listener&talker 예제를 테스트해보았습니다. 이번 글에서는 Docker 환경에서 ROS2 foxy기반 간단한 Gazebo simulation을 테스트 해 보겠습니다.
2022.03.14 - [Developer] - ROS2 foxy - Docker에서 운용하기 (1)
우선 저번에 테스트한 ROS2 foxy docker image를 불러오겠습니다. Gazebo가 GUI를 필요로하기에, Docker에서의 외부출력을 위해 docker option을 추가해주었습니다. /home/Docker/turtlebot3에 turtlebot3 관련 시뮬레이션 코드들을 받기 위해, 관련 폴더도 미리 설정해서 docker에서 접근가능하게 해놓았습니다.
sudo docker run --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" --volume="/home/Docker/turtlebot3:/root/turtlebot3_ws" -it --rm --privileged osrf/ros:foxy-desktop /bin/bash
Turtlebot3 관련 예제들이 잘 나와있으므로, Turtlebot3의 emanual을 참조해서 Gazebo simulation을 테스트해보았습니다.
https://emanual.robotis.com/docs/en/platform/turtlebot3/quick-start/
ROS2 foxy docker image에 접근하였으면, 해당 이미지에서 ROS2 관련 GAZEBO패키지와 SLAM 및 navigation 패키지들을 설치해줍니다.
# GAZEBO 설치 (ROS2 foxy 버전에 대응하는 GAZEBO 설치)
sudo apt-get install ros-foxy-gazebo-*
# SLAM 알고리즘 중 하나인 Cartographer 알고리즘 패키지 설치
sudo apt install ros-foxy-cartographer
sudo apt install ros-foxy-cartographer-ros
# Navigation알고리즘 패키지 설치
sudo apt install ros-foxy-navigation2
sudo apt install ros-foxy-nav2-bringup
Turtlebot3 관련 패키지들도 설치해줍니다.
# Turtlebot3관련 패키지 설치
source ~/.bashrc
sudo apt install ros-foxy-dynamixel-sdk
sudo apt install ros-foxy-turtlebot3-msgs
sudo apt install ros-foxy-turtlebot3
추가로 ROS_DOMAIN관련 ID도 특정 번호로 지정해줍니다. 아래 코드에서는 30으로 지정합니다.
# ROS_DOMAIN ID 설정
echo 'export ROS_DOMAIN_ID=30 #TURTLEBOT3' >> ~/.bashrc
source ~/.bashrc
해당 docker 이미지를 앞으로 계속 활용할 예정이므로, 현재까지 설치한 docker 이미지를 저장합니다. 새로운 터미널을 열어서 패키지를 설치한 docker image의 container ID를 확인후에 commit 명령어로 저장해줍니다.
# 현재 작업중인 docker image의 container ID 확인
sudo docker ps
# new image name으로 현재 container ID의 docker image를 저장함
docker commit {container ID} {new image name}
Gazebo를 현재 container에서 띄우기에 앞서서, docker user가 실행하는 프로그램을 X windows와 통신하도록 설정해줍니다. 통신을 위해 사용되는 command는 'xhost local:' 입니다.
# Docker user와 X windows 통신 설정
xhost +local:docker
# Docker user와 X windows 통신 해제
xhost -local:docker
이제 Gazebo 시뮬레이션을 테스트해보겠습니다. 새로운 터미널을 열었을 경우로 생각해서 내용을 정리하겠습니다.
터미널을 새로 열어서, 패키지를 모두 설치한 docker container에 접속합니다. 접속 후, ros설정을 확인하고 테스트할 turtlebot3 모델을 설정해줍니다. 저는 burger모델로 설정하겠습니다.
# docker container 진입
sudo docker exec -it {container ID} bash
# docker container 진입 후, ros 설정
source /opt/ros/foxy/setup.bash
source ~/turtlebot3_ws/install/setup.bash
# TURTLEBOT3 모델 설정 (burger 모델)
export TURTLEBOT3_MODEL=burger
# 기본 gazebo 환경 loading
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
위의 명령어를 실행하시면, 아래의 그림과 같은 Gazebo 실행화면을 확인하실수 있습니다.
이제 새로운 터미널을 하나 더 열어서, 방금 접속한 docker container에서 또 접속합니다. 접속한 후에, ros 설정 및 turtlebot3 모델 확인을 해준 다음, SLAM 노드를 돌려줍니다.
# docker container 접속
sudo docker exec -it {container ID} bash
# docker container 접속 후, ROS 설정
source /opt/ros/foxy/setup.bash
source ~/turtlebot3_ws/install/setup.bash
# Turtlebot3 모델 설정
export TURTLEBOT3_MODEL=burger
# SLAM 노드 run
ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True
위의 명령어들을 실행하시면, 아래와 같은 rviz화면이 뜨는 것을 확인하실수 있습니다.
이제 Gazebo에 떠있는 burger agent를 키보드로 움직일 수 있게, teleoperation 노드를 실행해보겠습니다. 터미널을 새로 열어서 현재 docker container에 진입한 후, ros 설정을 해주고 turtlebot3 모델을 설정해줍니다. 그 후에 teleoperation 노드를 실행해줍니다.
# docker container 진입
sudo docker exec -it {container ID} bash
# docker container 진입 후, ROS 설정
source /opt/ros/foxy/setup.bash
source ~/turtlebot3_ws/install/setup.bash
# Turtlebot3 model 설정
export TURTLEBOT3_MODEL=burger
# Teleoperation 노드 실행
ros2 run turtlebot3_teleop teleop_keyboard
위의 명령어를 실행하면 아래와 같은 화면을 command 창에서 확인가능합니다. 이제 Gazebo에 떠 있는 burger agent를 키보드로 조작할 수 있습니다.
이번 글에서는 docker 환경에서 ros2 foxy를 활용해 turtlebot3 burger를 Gazebo에서 시뮬레이션해보았습니다. 개인적으로 작업 시에, docker환경에서 GUI형식으로 화면 띄우는 데에 시간이 오래걸렸는데, 이 글을 통해서 다른 분들은 쉽게 할 수 있으면 좋겠습니다.
Malformed entry 1 in list file /etc/apt/sources.list.d/ros-latest.list (Component) 에러 (0) | 2022.03.29 |
---|---|
ros2 galactic velodyne vlp-16 설정 중 에러: ERROR: the following packages/stacks could not have their rosdep keys resolvedto system dependencies (0) | 2022.03.25 |
ROS2 foxy - Docker에서 운용하기 (1) (0) | 2022.03.14 |
Robot 움직이기 - Localization (0) | 2022.03.03 |
[ROS2 foxy] turtlesim과 rqt (0) | 2022.02.23 |
댓글 영역