[ROS2+Gazebo] Docker Image๋ก ROS2, Gazebo ๋น๋ํ๊ธฐ
Dockerfile์ ์ด์ฉํ๋ฉด ๋ค์ํ ํจํค์ง๊ฐ ํ ๋ฒ์ ์ค์น๋ ๋์ปค ์ปจํ ์ด๋๋ฅผ ์ฝ๊ฒ ์์ฑํ ์ ์๋ค.
์ด๋ฏธ์ง ์์ฑ์ ์ํด ์๋ Github์ ๋์ปค ํ์ผ์ ์ด์ฉํ ๊ฒ์ด๋ค.
GitHub - ryomo/ros2-gazebo-docker: A ROS2 & Gazebo container with WSLg enabled
A ROS2 & Gazebo container with WSLg enabled. Contribute to ryomo/ros2-gazebo-docker development by creating an account on GitHub.
github.com
๋จผ์ ๊น์ ํด๋ก ํ๊ณ , ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ค. ์๋์ ๊ฐ์ด ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋ค.
$ git clone https://github.com/ryomo/ros2-gazebo-docker.git
$ cd ros2-gazebo-docker/docker
$ docker build -t ros2-gazebo .
๊ทธ๋ผ ์ด๋ฏธ์ง๊ฐ ๋ง๋ค์ด์ก์ ๊ฒ์ด๋ค. docker images ๋ช ๋ น์ด๋ก ํ์ธํ ์ ์๋ค.
์ด๋ฏธ์ง๊ฐ ๋ง๋ค์ด์ก๋ค๋ฉด, ์ปจํ ์ด๋๋ฅผ ์์ฑํด์ผ ํ๋ค. ์ปจํ ์ด๋ ์์ฑ์ ์๋ ๋ช ๋ น์ด๋ก ์งํํด์ฃผ์๋ค.
$ docker run -it -e DISPLAY=unix$DISPLAY -e USER=$USER -e XDG_RUNTIME_DIR=/tmp -v /root/.Xauthority:/root/.Xauthority -v /tmp/.X11-unix:/temp/.X11 --privileged --gpus all --net=host --runtime=nvidia --name ros2-gazebo ros2-gazebo:latest
๋์ปค๊ฐ ์คํ๋ ๊ฒ์ด๋ค. ๋ฐฐํฌ ๊น์์๋ docker-compose๋ฅผ ์ฌ์ฉํ๋ผ๊ณ ๋์ด์๋๋ฐ, ์ด ํจํค์ง๊ฐ ์ค์น๋์ด ์์ง ์์ ๊ทธ๋ฅ docker๋ฅผ ์ด์ฉํ๋ค. ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ํด๋น ํฐ๋ฏธ๋์ ์ฌ์ฉํ ์๊ฐ ์์ด์ ์๋ก์ด ํฐ๋ฏธ๋์์ executeํด์ฃผ์๋ค.
$ docker exec -it ros2-gazebo /bin/bash
๋ง์ฝ root ์ ์ ๋ก ์ ์ํ๋ ค๋ฉด, --user root ์ต์ ์ ์ถ๊ฐํ๋ฉด ๋๋ค.
ํฐ๋ฏธ๋์ ์ ์์ ์ผ๋ก ์ ์๋์๋ค. ์ด์ ํ ์คํธ๋ฅผ ํด ๋ณผ ์ฐจ๋ก์ด๋ค.
๊ฐ๋จํ๊ฒ ํฐํ์ฌ์ ๋จผ์ ์คํํด๋ณธ๋ค.
$ ros2 run turtlesim turtlesim_node
์ ์คํ์ด ๋๋ ๋ชจ์ต์ด๋ค. Gazebo๊ฐ ์ค์น๋์๋์ง๋ ํ์ธํด์ผ ํ๋ฏ๋ก, ์๋ฎฌ๋ ์ดํฐ๋ฅผ ์ผ๋ณด๊ฒ ๋ค.
# 1๋ฒ ํฐ๋ฏธ๋
$ gazebo --verbose /opt/ros/galactic/share/gazebo_plugins/worlds/gazebo_ros_diff_drive_demo.world
# 2๋ฒ ํฐ๋ฏธ๋
$ ros2 topic pub /demo/cmd_demo geometry_msgs/Twist '{linear: {x: 1.0}, angular: {z: 1.0}}' -1
1๋ฒ ํฐ๋ฏธ๋์์ ๊ฐ์ ๋ณด๋ฅผ ์คํํ๋ฉด, ์๋ฎฌ๋ ์ดํฐ ํ๊ฒฝ์ด ์ถ๋ ฅ๋๋ค.
์ด ์ํ์์ 2๋ฒ์งธ ํฐ๋ฏธ๋์ ์ด๊ณ ros ํ ํฝ์ ํผ๋ธ๋ฆฌ์ํด์ฃผ๋ฉด ๋ฐ๋ชจ ๋ก๋ด์ด ๋น๊ธ๋น๊ธ ๋๋ค.