Deep Study - dingdongdengdong/astra_ws GitHub Wiki
1. FROM ros:humble-ros-base
ros:humble-ros-base๋์ ๋ค๋ฅธ ์ด๋ฏธ์ง ์ฌ์ฉ:ros:humble-ros-core: ROS์ ํต์ฌ ํจํค์ง๋ง ํฌํจ๋์ด ์์ดros-humble-desktop์ ์ค์นํ ํ์ ์์ด ์ฉ๋์ด ๋ ์๊ณ ๊ฐ๋ณ์ต๋๋ค. ํ์ง๋ง GUI ํ๊ฒฝ์ด๋ ์๋ฎฌ๋ ์ด์ ๊ด๋ จ ํจํค์ง๋ค์ด ํฌํจ๋์ด ์์ง ์์ ํ์ํ๋ค๋ฉด ์ถ๊ฐ์ ์ผ๋ก ์ค์นํด์ผ ํฉ๋๋ค.ros:humble-ros-desktop:ros-humble-desktopํจํค์ง๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์น๋์ด ์์ด Docker ์ด๋ฏธ์ง ํฌ๊ธฐ๋ ์ปค์ง์ง๋ง, ๋ฐ๋ก ์ค์นํ ํ์ ์์ด ๋ฐ๋ก ๋ฐ์คํฌํ ํ๊ฒฝ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.ubuntu:22.04๋๋ ๋ค๋ฅธ OS ์ด๋ฏธ์ง: ROS๊ฐ ์ฌ์ ์ค์น๋์ง ์์ ๊ธฐ๋ณธ ์ด์์ฒด์ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ฉด, ROS๋ฅผ ์ฒ์๋ถํฐ ์ง์ ์ค์นํด์ผ ํฉ๋๋ค. ์ด๋ ์ด๋ฏธ์ง ๋น๋ ์๊ฐ์ด ํจ์ฌ ์ค๋ ๊ฑธ๋ฆฌ๊ณ , ROS ์ค์น์ ํ์ํ ์์กด์ฑ ํจํค์ง๋ค์ ๋ชจ๋ ์๋์ผ๋ก ๊ด๋ฆฌํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์์ต๋๋ค. ํ์ง๋ง ์ํ๋ ROS ๋ฒ์ ์ด๋ ํน์ ํ๊ฒฝ์ ๋ํ ์ธ๋ฐํ ์ ์ด๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
2. ARG USERNAME=rosdev, ARG UID=1000, ARG GID=$UID
์ด ๋ณ์๋ค์ Docker ์ปจํ ์ด๋ ๋ด์์ ์์ฑ๋ ์ฌ์ฉ์ ๊ณ์ ์ ์ด๋ฆ(USERNAME), ์ฌ์ฉ์ ID(UID), ๊ทธ๋ฃน ID(GID)๋ฅผ ์ ์ํฉ๋๋ค.
USERNAME๋ณ๊ฒฝ:- ์:
ARG USERNAME=myuser: ์ปจํ ์ด๋ ๋ด์์rosdev๋์myuser๋ผ๋ ์ด๋ฆ์ ์ฌ์ฉ์ ๊ณ์ ์ด ์์ฑ๋ฉ๋๋ค.$HOME๋๋ ํ ๋ฆฌ๋/home/myuser๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค. ์ด๋ ์ปจํ ์ด๋ ๋ด์์ ์์ ํ๋ ์ฌ์ฉ์ ๊ณ์ ์ ์ด๋ฆ๋ง ๋ฐ๋๋ ๊ฒ์ด๋ฏ๋ก ๊ธฐ๋ฅ์ ์ธ ํฐ ์ฐจ์ด๋ ์์ง๋ง, ์ฌ์ฉ์๊ฐ ์ต์ํ ์ด๋ฆ์ผ๋ก ์ค์ ํ์ฌ ํธ์์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
- ์:
UID,GID๋ณ๊ฒฝ:- ์:
ARG UID=1001,ARG GID=1001: ์ปจํ ์ด๋ ๋ด์์ ์์ฑ๋ ์ฌ์ฉ์์ UID์ GID๊ฐ 1001๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค. - ๊ฐ์ฅ ์ค์ํ ์ฐจ์ด์ : ํธ์คํธ ๋จธ์ (Docker๋ฅผ ์คํํ๋ ์ปดํจํฐ)๊ณผ ์ปจํ
์ด๋ ๊ฐ์ ํ์ผ ๊ถํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
- ๋์ผํ๊ฒ ์ค์ : ๋ง์ฝ ํธ์คํธ ๋จธ์ ์์ ์์
ํ๋ ์ฌ์ฉ์ ๊ณ์ ์ UID/GID์ ์ปจํ
์ด๋ ๋ด ์ฌ์ฉ์ ๊ณ์ ์ UID/GID๊ฐ ๋์ผํ๋ค๋ฉด, ํธ์คํธ์ ์ปจํ
์ด๋ ๊ฐ์ ํ์ผ์ ๊ณต์ ํ ๋ ๊ถํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ญ๋๋ค. ์๋ฅผ ๋ค์ด, ํธ์คํธ์์ ์์ฑํ ํ์ผ์ ์ปจํ
์ด๋ ๋ด์์ ์์ ํ๊ฑฐ๋, ์ปจํ
์ด๋ ๋ด์์ ์์ฑํ ํ์ผ์ ํธ์คํธ์์ ์ ๊ทผํ ๋ ๊ถํ ์ถฉ๋์ด ๋ฐ์ํ์ง ์์
sudo์์ด๋ ์์ ๋กญ๊ฒ ํ์ผ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. - ๋ค๋ฅด๊ฒ ์ค์ : UID/GID๊ฐ ๋ค๋ฅด๋ฉด, ํธ์คํธ์ ์ปจํ
์ด๋ ๊ฐ์ ํ์ผ์ ๊ณต์ ํ ๋ ๊ถํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ปจํ
์ด๋์์ ์์ฑ๋ ํ์ผ์ ํธ์คํธ์์ ๋ค๋ฅธ ์ฌ์ฉ์(UID๊ฐ ๋ค๋ฅธ)๊ฐ ์์ ํ ๊ฒ์ผ๋ก ์ธ์๋์ด ์ ๊ทผ ๊ถํ์ด ์๊ฑฐ๋,
sudo๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ํฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฐ๋ฐ ํ๊ฒฝ ์ค์ ์ ๋ถํธํจ์ ์ด๋ํ ์ ์์ต๋๋ค.
- ๋์ผํ๊ฒ ์ค์ : ๋ง์ฝ ํธ์คํธ ๋จธ์ ์์ ์์
ํ๋ ์ฌ์ฉ์ ๊ณ์ ์ UID/GID์ ์ปจํ
์ด๋ ๋ด ์ฌ์ฉ์ ๊ณ์ ์ UID/GID๊ฐ ๋์ผํ๋ค๋ฉด, ํธ์คํธ์ ์ปจํ
์ด๋ ๊ฐ์ ํ์ผ์ ๊ณต์ ํ ๋ ๊ถํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ญ๋๋ค. ์๋ฅผ ๋ค์ด, ํธ์คํธ์์ ์์ฑํ ํ์ผ์ ์ปจํ
์ด๋ ๋ด์์ ์์ ํ๊ฑฐ๋, ์ปจํ
์ด๋ ๋ด์์ ์์ฑํ ํ์ผ์ ํธ์คํธ์์ ์ ๊ทผํ ๋ ๊ถํ ์ถฉ๋์ด ๋ฐ์ํ์ง ์์
- ์:
3. RUN apt install -y --no-install-recommends ... ros-humble-desktop
ros-humble-desktop๋์ ๋ค๋ฅธ ROS ํจํค์ง ์ค์น:ros-humble-desktop-full: ROS ๋ฐ์คํฌํ ํ๊ฒฝ๋ฟ๋ง ์๋๋ผ ์๋ฎฌ๋ ์ด์ ๋๊ตฌ(Gazebo), 2D/3D ์๋ฎฌ๋ ์ดํฐ, ๋ด๋น๊ฒ์ด์ ๋ฑ ๋ ๋ง์ ํจํค์ง๊ฐ ํฌํจ๋ฉ๋๋ค. ์ด๋ฏธ์ง ํฌ๊ธฐ๊ฐ ๋ ์ปค์ง์ง๋ง, ์ถ๊ฐ์ ์ธ ๊ฐ๋ฐ ํ๊ฒฝ ์ค์ ์์ด ๋ฐ๋ก ๋ค์ํ ROS ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.ros-humble-ros-base(์ด๋ฏธ์ง์์ ์ด๋ฏธ ํฌํจ): ROS์ ํต์ฌ ํจํค์ง๋ง ํฌํจ๋ฉ๋๋ค. ๋ง์ฝFROM์์ros:humble-ros-base๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ด ๋ถ๋ถ์ ๋ถํ์ํ๊ฑฐ๋, ๋ค๋ฅธ ์ต์ํ์ ํจํค์ง๋ง ์ค์นํ ๋ ์ฌ์ฉํฉ๋๋ค.- ํน์ ROS ํจํค์ง:
ros-humble-slam-toolbox,ros-humble-navigation2๋ฑ ํน์ ๊ธฐ๋ฅ์ ํ์ํ ํจํค์ง๋ง ์ค์นํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ํ์ํ ๊ธฐ๋ฅ๋ง ํฌํจํ ์ ์์ต๋๋ค.
4. RUN groupadd -g $GID $USERNAME && useradd -lm -u $UID -g $USERNAME -s /bin/bash $USERNAME
์ด ๋ถ๋ถ์ ์์์ ์ค๋ช
ํ UID์ GID ๋ณ์์ ๋ณ๊ฒฝ์ ๋ฐ๋ผ ์ง์ ์ ์ผ๋ก ์ํฅ์ ๋ฐ์ต๋๋ค. ๋ณ์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์์ฑ๋๋ ์ฌ์ฉ์์ UID์ GID๊ฐ ๊ทธ ๊ฐ์ผ๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
5. WORKDIR /home/$USERNAME/ros2_ws
ros2_ws๋์ ๋ค๋ฅธ ์ํฌ์คํ์ด์ค ์ด๋ฆ ์ฌ์ฉ:- ์:
WORKDIR /home/$USERNAME/my_project: ์ปจํ ์ด๋์ ๊ธฐ๋ณธ ์์ ๋๋ ํ ๋ฆฌ๊ฐ/home/$USERNAME/my_project๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค. ์ด๋ ์ฌ์ฉ์๊ฐ ์ปจํ ์ด๋์ ์ ์ํ์ ๋ ์ฒ์์ผ๋ก ์์นํ๊ฒ ๋๋ ๋๋ ํ ๋ฆฌ์ด์,ros2_ws๋์ ๋ค๋ฅธ ์ด๋ฆ์ ROS ์ํฌ์คํ์ด์ค๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ ๋ ๋ณ๊ฒฝํฉ๋๋ค. ์ฌ๋ฌ ํ๋ก์ ํธ๋ฅผ ์งํํ ๊ฒฝ์ฐ ๊ฐ ํ๋ก์ ํธ๋ณ๋ก ์ํฌ์คํ์ด์ค ์ด๋ฆ์ ๋ค๋ฅด๊ฒ ์ง์ ํ์ฌ ํผ๋์ ํผํ ์ ์์ต๋๋ค.
- ์:
6. .bashrc ์ค์ (์์ค ๊ฒฝ๋ก ๋ฐ ํ๊ฒฝ ๋ณ์)
source /opt/ros/$ROS_DISTRO/setup.bash:ROS_DISTRO๋ ์ด Dockerfile์์๋humble๋ก ๊ณ ์ ๋์ด ์์ต๋๋ค. ๋ง์ฝFROM์ด๋ฏธ์ง์์ ๋ค๋ฅธ ROS ๋ฐฐํฌํ(์:ros:iron-ros-base)์ ์ฌ์ฉํ๋ค๋ฉด$ROS_DISTRO๊ฐ๋iron์ผ๋ก ๋ณ๊ฒฝ๋์ด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ROS ํ๊ฒฝ ์ค์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋ก๋๋์ง ์์ros2๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
source /home/$USERNAME/ros2_ws/install/setup.bash:ros2_ws๋์ ๋ค๋ฅธ ์ํฌ์คํ์ด์ค ์ด๋ฆ์ ์ฌ์ฉํ๋ค๋ฉด, ์ด ๊ฒฝ๋ก๋ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค. ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด ์ฌ์ฉ์๊ฐ ๋น๋ํ ROS ํจํค์ง๋ฅผ ์คํํ ์ ์์ต๋๋ค.
7. COPY ./ros_entrypoint.sh /
./ros_entrypoint.sh๋์ ๋ค๋ฅธ ํ์ผ ์ฌ์ฉ:- ๋ง์ฝ ์ปจํ
์ด๋ ์์ ์ ์คํ๋ ์คํฌ๋ฆฝํธ์ ์ด๋ฆ์ด๋ ๊ฒฝ๋ก๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด ์ด ๋ถ๋ถ์ ์์ ํฉ๋๋ค.
ros_entrypoint.sh๋ ์ผ๋ฐ์ ์ผ๋ก ROS ํ๊ฒฝ ์ค์ ์ ๋ก๋ํ๊ณCMD๋ก ์ง์ ๋ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ ์ญํ ์ ํฉ๋๋ค. ๋ค๋ฅธ ์์ ๋ก์ง์ด ํ์ํ๋ค๋ฉด ์๋ก์ด ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ์ฌ ๋ณต์ฌํ๊ณENTRYPOINT๋ฅผ ์์ ํด์ผ ํฉ๋๋ค.
- ๋ง์ฝ ์ปจํ
์ด๋ ์์ ์ ์คํ๋ ์คํฌ๋ฆฝํธ์ ์ด๋ฆ์ด๋ ๊ฒฝ๋ก๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด ์ด ๋ถ๋ถ์ ์์ ํฉ๋๋ค.
8. ENTRYPOINT ["/ros_entrypoint.sh"]
"/ros_entrypoint.sh"๋์ ๋ค๋ฅธ ๋ช ๋ น์ด ์ฌ์ฉ:- ์ปจํ
์ด๋๊ฐ ์์๋ ๋ ํญ์ ์คํ๋๋ ๊ธฐ๋ณธ ๋ช
๋ น์ด์
๋๋ค. ์ด ์คํฌ๋ฆฝํธ๋ ์ผ๋ฐ์ ์ผ๋ก ROS ํ๊ฒฝ์ ์ค์ ํ๊ณ
CMD์์ ์ ๊ณต๋๋ ๋ช ๋ น์ ์คํํฉ๋๋ค. ๋ง์ฝ ๋ค๋ฅธ ์ข ๋ฅ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปจํ ์ด๋ ์์ ์ ์คํํ๊ณ ์ถ๋ค๋ฉด ์ด ๋ถ๋ถ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. - ์:
ENTRYPOINT ["python3", "/app/my_script.py"]: ์ปจํ ์ด๋ ์์ ์ ํญ์ Python ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค.
- ์ปจํ
์ด๋๊ฐ ์์๋ ๋ ํญ์ ์คํ๋๋ ๊ธฐ๋ณธ ๋ช
๋ น์ด์
๋๋ค. ์ด ์คํฌ๋ฆฝํธ๋ ์ผ๋ฐ์ ์ผ๋ก ROS ํ๊ฒฝ์ ์ค์ ํ๊ณ
9. CMD ["bash"]
["bash"]๋์ ๋ค๋ฅธ ๋ช ๋ น์ด ์ฌ์ฉ:ENTRYPOINT๊ฐ ์ง์ ๋์ง ์์๊ฑฐ๋,ENTRYPOINT๊ฐ ์คํฌ๋ฆฝํธ์ธ ๊ฒฝ์ฐ ํด๋น ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋ ํCMD์ ์ง์ ๋ ๋ช ๋ น์ด๊ฐ ์คํ๋ฉ๋๋ค.- ํ์ฌ ์ค์ ์
bash์ ธ์ ์์ํ๋ฏ๋ก ์ปจํ ์ด๋์ ์ง์ ํ์ ๋ ๋ช ๋ น์ด๋ฅผ ์ง์ ์ ๋ ฅํ ์ ์์ต๋๋ค. - ์:
CMD ["ros2", "launch", "my_package", "my_node.launch.py"]: ์ปจํ ์ด๋๊ฐ ์์๋ ๋ ํน์ ROS ๋ ธ๋๋ฅผ ์๋์ผ๋ก ์คํํฉ๋๋ค. ์ด๋ ROS ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ ๋ ์ ์ฉํฉ๋๋ค. - ์:
CMD ["sleep", "infinity"]: ์ปจํ ์ด๋๋ฅผ ๊ณ์ ์คํ ์ํ๋ก ์ ์งํ๊ณ ์ถ์ ๋ ์ฌ์ฉํฉ๋๋ค. (์ด ๊ฒฝ์ฐdocker exec๋ฑ์ผ๋ก ์ปจํ ์ด๋์ ์ ์ํ์ฌ ์์ ํฉ๋๋ค.)
์์ฝ ๋ฐ ์ฃผ์ ๊ณ ๋ ค์ฌํญ:
๋ณ์ ๊ฐ๋ค์ ๋ณ๊ฒฝํจ์ผ๋ก์จ ๋ค์๊ณผ ๊ฐ์ ์ฃผ์ ์ฐจ์ด๊ฐ ๋ฐ์ํฉ๋๋ค:
- ๊ธฐ๋ฐ ํ๊ฒฝ: ์ฌ์ฉํ๋ Docker ์ด๋ฏธ์ง์ ๋ฐ๋ผ ROS ์ค์น ์ํ, ํฌ๊ธฐ, ๊ทธ๋ฆฌ๊ณ ์ด๊ธฐ ์ค์ ์ด ๋ฌ๋ผ์ง๋๋ค.
- ์ฌ์ฉ์ ๊ณ์ ๋ฐ ๊ถํ:
USERNAME,UID,GID๋ ์ปจํ ์ด๋ ๋ด์์ ์์ ํ ์ฌ์ฉ์์ ๊ณ์ ์ ๋ณด์ ๊ถํ์ ๊ฒฐ์ ํ๋ฉฐ, ํธ์คํธ์์ ํ์ผ ๊ณต์ ์ ๊ถํ ๋ฌธ์ ์ ํฐ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ํนํUID์GID๋ ํธ์คํธ์ ์ปจํ ์ด๋ ๊ฐ์ ๊ถํ ์ผ์น๋ฅผ ์ํด ์ค์ํฉ๋๋ค. - ์ค์น๋๋ ROS ํจํค์ง:
apt install์์ ์ค์นํ๋ ROS ํจํค์ง์ ๋ฐ๋ผ ์ปจํ ์ด๋์ ๊ธฐ๋ฅ๊ณผ ํฌ๊ธฐ๊ฐ ๋ฌ๋ผ์ง๋๋ค. ํ์ํ ์ต์ํ์ ํจํค์ง๋ง ์ค์นํ์ฌ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ต์ ํํ๊ฑฐ๋, ๋ชจ๋ ๊ธฐ๋ฅ์ ํฌํจํ์ฌ ํธ๋ฆฌ์ฑ์ ๋์ผ ์ ์์ต๋๋ค. - ์ํฌ์คํ์ด์ค ๋ฐ ์์
๊ฒฝ๋ก:
WORKDIR๋ฐ.bashrc์ ์ํฌ์คํ์ด์ค ๊ฒฝ๋ก๋ ์ฌ์ฉ์์ ์์ ํ๊ฒฝ๊ณผ ROS ํจํค์ง ๋น๋ ๋ฐ ์คํ์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. - ์ปจํ
์ด๋ ์์ ๋์:
ENTRYPOINT์CMD๋ ์ปจํ ์ด๋๊ฐ ์คํ๋ ๋ ์ด๋ค ๋ช ๋ น์ด๊ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ์คํ๋ ์ง๋ฅผ ์ ์ํ๋ฉฐ, ์ด๋ ์ปจํ ์ด๋์ ์ฉ๋(๊ฐ๋ฐ ํ๊ฒฝ, ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ ๋ฑ)์ ๋ฐ๋ผ ๋งค์ฐ ์ค์ํฉ๋๋ค.
์ด๋ฌํ ์ฐจ์ด์ ๋ค์ ์ดํดํ๊ณ ๊ฐ ๋ณ์์ ๊ฐ์ ํ๋ก์ ํธ์ ์๊ตฌ์ฌํญ๊ณผ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ง๊ฒ ์กฐ์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๋ ๊ฐ์ง ๋ฐฉ์(FROM ros:humble-ros-base ํ RUN apt install ros-humble-desktop vs. FROM ros:humble-ros-desktop ๋ฐ๋ก ์ฌ์ฉ)์ ์ฐจ์ด์
๋น์ : ์๋์ฐจ ๊ตฌ๋งค vs. ์กฐ๋ฆฝ
์ฐ๋ฆฌ๊ฐ ์๋์ฐจ๋ฅผ ๊ตฌ๋งคํ๋ค๊ณ ์๊ฐํด ๋ด ์๋ค.
-
FROM ros:humble-ros-desktop๋ฐฉ์:- ์์ฑ๋ ์๋์ฐจ(ํ์ต์ ๋ชจ๋ธ)๋ฅผ ๊ตฌ๋งคํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
- ์ฅ์ :
- ๊ตฌ๋งค ์ฆ์ ์ด์ ํ ์ ์์ต๋๋ค. (Dockerfile์ด ๊ฐ๊ฒฐํ๊ณ , ๋น๋ ํ ๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅ)
- ํค๋๋ผ์ดํธ, ์์ด์ปจ, ๋ด๋น๊ฒ์ด์ ๋ฑ ํ์ํ ๊ธฐ๋ฅ์ด ๋ชจ๋ ๊ธฐ๋ณธ์ผ๋ก ์ฅ์ฐฉ๋์ด ์์ต๋๋ค. (ROS ๋ฐ์คํฌํ์ ํ์ํ Rviz, Gazebo ๋ฑ์ด ๋ชจ๋ ํฌํจ)
- ๋จ์ :
- ๋ด๊ฐ ํ์ ์๋ ๊ธฐ๋ฅ(์: ์ ๋ฃจํ๋ ๊ณ ์ฑ๋ฅ ์คํผ์ปค)๊น์ง๋ ํฌํจ๋์ด ์์ด, ์ฐจ๊ฐ์ด ๋น์ธ๊ณ (์ด๋ฏธ์ง ์ฉ๋์ด ํฌ๊ณ ), ๋ฌด๊ฒ๋ ๋ ๋๊ฐ๋๋ค. (๋ถํ์ํ ํจํค์ง ํฌํจ์ผ๋ก ์ด๋ฏธ์ง ํฌ๊ธฐ ์ฆ๊ฐ)
- ๋์ค์ ํน์ ๋ถํ๋ง ๋ค๋ฅธ ๋ธ๋๋๋ก ๋ฐ๊พธ๊ณ ์ถ์ด๋, ๊ธฐ์กด์ ์ฅ์ฐฉ๋ ๊ฒ์ ๋ผ์ด๋ด๊ณ ๋ค์ ์ค์นํด์ผ ํ๋ฏ๋ก ๋ฒ๊ฑฐ๋กญ์ต๋๋ค. (์ด๋ฏธ์ง ๋ ์ด์ด ๊ตฌ์กฐ์ ํน์ ํจํค์ง๋ง ์ ๊ฑฐํ๊ฑฐ๋ ๊ต์ฒดํ๊ธฐ ์ด๋ ค์)
-
FROM ros:humble-ros-baseํRUN apt install ros-humble-desktop๋ฐฉ์:- ์๋์ฐจ ๋ผ๋(์์)๋ฅผ ๊ตฌ๋งคํ๊ณ , ๊ทธ ์์ ํ์ํ ๋ถํ๋ค์ ํ๋์ฉ ์กฐ๋ฆฝํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
- ์ฅ์ :
- ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ผ๋๋ง ์๊ธฐ ๋๋ฌธ์ ์ด๊ธฐ ๋น์ฉ์ด ์ ๋ ดํ๊ณ (base ์ด๋ฏธ์ง ์ฉ๋์ด ์์), ๋ ๋น ๋ฅด๊ฒ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. (์ด๊ธฐ ๋ ์ด์ด ๋ค์ด๋ก๋ ๋ฐ ์บ์ฑ ๋น ๋ฆ)
- ๋ด๊ฐ ์ํ๋ ํค๋๋ผ์ดํธ, ์์ด์ปจ, ๋ด๋น๊ฒ์ด์
์ ์ง์ ์ ํํด์ ์ฅ์ฐฉํ ์ ์์ต๋๋ค. (ํ์ํ
apt installํจํค์ง๋ฅผ ์ ํ์ ์ผ๋ก ์ถ๊ฐ ๊ฐ๋ฅ) - ๋์ค์ ๋ด๋น๊ฒ์ด์
์์คํ
๋ง ์ต์ ๋ชจ๋ธ๋ก ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด, ๋ด๋น๊ฒ์ด์
๋ถํ๋ง ๊ต์ฒดํ๋ฉด ๋ฉ๋๋ค. ๋ค๋ฅธ ๋ถํ๋ค์ ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค. (์บ์ฑ ํจ์จ์ฑ:
base๋ ์ด์ด๋ ๊ทธ๋๋ก ๋๊ณapt install๋ ์ด์ด๋ง ๋ค์ ๋น๋) - ๊ผญ
ros-humble-desktop์ด ์๋๋๋ผ๋,ros-humble-ros-core๋ง ์ค์นํ๊ฑฐ๋, ํน์ ์๋ฎฌ๋ ์ดํฐ ํจํค์ง๋ง ์ค์นํ๋ ๋ฑ ๋งค์ฐ ์ ์ฐํ๊ฒ ๋ง์ถคํ ์๋์ฐจ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
- ๋จ์ :
- ์์ฑ๋ ์๋์ฐจ๋ฅผ ๋ง๋๋ ๋ฐ ์ถ๊ฐ์ ์ธ ์๊ฐ๊ณผ ๋
ธ๋ ฅ์ด ํ์ํฉ๋๋ค. (Dockerfile์
RUN apt install๋ช ๋ น์ด๊ฐ ์ถ๊ฐ๋๊ณ , ์ด ๊ณผ์ ์์ ์๊ฐ์ด ์์๋จ) - ์กฐ๋ฆฝ ๊ณผ์ ์์ ์ค์๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. (์ค์น ์ค ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ์ฑ)
- ์ต์ข ์ ์ผ๋ก๋ ์์ฑ๋ ์๋์ฐจ์ ๊ธฐ๋ฅ์ ์ผ๋ก๋ ๊ฐ์ง๋ง, ๋ฏธ๋ฌํ ์ฐจ์ด(์: ๊ฐ ๋ถํ์ ๋ฒ์ , ์ค์น ์์์ ๋ฐ๋ฅธ ์ข ์์ฑ ์ฐจ์ด)๊ฐ ์์ ์ ์์ต๋๋ค.
- ์์ฑ๋ ์๋์ฐจ๋ฅผ ๋ง๋๋ ๋ฐ ์ถ๊ฐ์ ์ธ ์๊ฐ๊ณผ ๋
ธ๋ ฅ์ด ํ์ํฉ๋๋ค. (Dockerfile์
Docker ๋ ์ด์ด ๊ด์ ์์ ๋ ๊น์ด ์ดํดํ๊ธฐ:
Docker ์ด๋ฏธ์ง๋ ์ฌ๋ฌ ๊ฐ์ ์ฝ๊ธฐ ์ ์ฉ(read-only) ๋ ์ด์ด๊ฐ ์์ฌ ๋ง๋ค์ด์ง๋๋ค. ๊ฐ Dockerfile ๋ช
๋ น(ํนํ FROM, RUN, COPY, ADD)์ ์๋ก์ด ๋ ์ด์ด๋ฅผ ์์ฑํฉ๋๋ค.
-
FROM ros:humble-ros-desktop์ ๊ฒฝ์ฐ:- Docker Hub์์
ros:humble-ros-desktop์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค. ์ด ์ด๋ฏธ์ง๋ ์ด๋ฏธ ์๋ง์ ๋ ์ด์ด๋ค์ด ํฉ์ณ์ ธros-baseํ๊ฒฝ ์์ros-humble-desktop๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ํจํค์ง๋ค์ ์ค์นํ ์ํ์ ๋๋ค. - ์ฆ,
ros-humble-desktop์ ์ค์นํ๋ ๋ชจ๋apt install๋ช ๋ น๊ณผ ๊ทธ ๊ฒฐ๊ณผ๋ฌผ๋ค์ด ์ด๋ฏธ ํ๋์ ๊ฑฐ๋ํ ์ฌ์ ๋น๋๋ ๋ ์ด์ด ๋ฌถ์์ผ๋ก ์กด์ฌํฉ๋๋ค. - ๋น์ ์ Dockerfile์ ์ด ๊ฑฐ๋ํ ๋ ์ด์ด ๋ฌถ์ ์์ ์๋ก์ด ๋ ์ด์ด(์: ์ฌ์ฉ์ ์์ฑ, ์ํฌ์คํ์ด์ค ์์ฑ ๋ฑ)๋ฅผ ์ถ๊ฐํ๊ฒ ๋ฉ๋๋ค.
- Docker Hub์์
-
FROM ros:humble-ros-baseํRUN apt install ros-humble-desktop์ ๊ฒฝ์ฐ:FROM ros:humble-ros-base: ์ฒซ ๋ฒ์งธ ๋ ์ด์ด๋ros-base์ด๋ฏธ์ง์ ๋๋ค. ์ด ์ด๋ฏธ์ง๋ros-desktop์ ๋นํด ํจ์ฌ ์์ต๋๋ค.RUN apt update -q && apt upgrade -q -y: ๋ ๋ฒ์งธ ๋ ์ด์ด๋ ์์คํ ์ ๋ฐ์ดํธ๋ฅผ ์ํํฉ๋๋ค.RUN apt install -y --no-install-recommends ... ros-humble-desktop: ์ธ ๋ฒ์งธ ๋ ์ด์ด์์ros-humble-desktopํจํค์ง ๋ฐ ๋ค๋ฅธ ํ์ํ ํจํค์ง๋ค์ ์๋กญ๊ฒ ์ค์นํฉ๋๋ค. ์ด ๊ณผ์ ์์apt install๋ช ๋ น์ ์ํด ํ์ผ ์์คํ ์ ๋ง์ ๋ณ๊ฒฝ์ด ์ผ์ด๋๊ณ , ์ด ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋ก์ด ๋ ์ด์ด์ ๊ธฐ๋ก๋ฉ๋๋ค.RUN apt clean && rm -rf /var/lib/apt/lists/*: ๋ค ๋ฒ์งธ ๋ ์ด์ด์์ ์ค์น ํ ๋จ์ ์์ ํ์ผ์ ์ ๊ฑฐํฉ๋๋ค. ์ด๋ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
ํต์ฌ ์ฐจ์ด์ ์ ์บ์ฑ(Caching)์ ๋๋ค.
๋ง์ฝ ๋น์ ์ด Dockerfile์ RUN apt install ๋ผ์ธ์ ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด:
-
FROM ros:humble-ros-desktop๋ฐฉ์: ์ด ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ฉด,ros-humble-desktop์ ๋ด์ฉ์ ์ด๋ฏธ ์ฒซ ๋ฒ์งธ ๋ ์ด์ด์ ๊ณ ์ ๋์ด ์์ต๋๋ค. ๋ง์ฝ ๋น์ ์ดros-humble-desktop์ ํน์ ๊ตฌ์ฑ์์๋ง ๋ฐ๊พธ๊ฑฐ๋, ๋ค๋ฅธ ROS ํจํค์ง(์:ros-humble-navigation2)๋ฅผ ์ถ๊ฐํ๊ณ ์ถ๋ค๋ฉด,apt install์ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ์ด ์ถ๊ฐ๋apt install์ros-humble-desktop์ด ์ด๋ฏธ ์ค์น๋ ๋ ์ด์ด ์์ ์๋ก์ด ๋ ์ด์ด๋ฅผ ์์ฑํ๊ฒ ๋๋ฏ๋ก, ์ค๋ณต๋๊ฑฐ๋ ๋ถํ์ํ ํ์ผ์ด ๋ง์์ง ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ๋ํ, ์ด๋ฏธ ์ค์น๋ ๊ฒ์ ์ ๊ฑฐํ๋ ๊ณผ์ ์ ๋ ๋ณต์กํ๊ณ , ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ค์ด๋๋ฐ ํ๊ณ๊ฐ ์์ต๋๋ค. -
FROM ros:humble-ros-baseํRUN apt install ...๋ฐฉ์:- ๋ง์ฝ ๋น์ ์ด
ros-humble-desktop๋์ros-humble-perception์ ์ค์นํ๊ณ ์ถ๋ค๋ฉด,apt install๋ผ์ธ๋ง ์์ ํ๋ฉด ๋ฉ๋๋ค. - Docker๋
FROM๋ ์ด์ด์apt update๋ ์ด์ด๋ ์บ์์์ ์ฌ์ฌ์ฉํ๊ณ ,apt install๋ ์ด์ด๋ถํฐ ์๋กญ๊ฒ ๋น๋ํฉ๋๋ค. ์ด๋ ์ ์ฒด ์ด๋ฏธ์ง ๋น๋ ์๊ฐ์ ๋จ์ถ์ํค๊ณ , ์ํ๋ ํจํค์ง ๊ตฌ์ฑ์ผ๋ก ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์๊ฒ ํฉ๋๋ค.
- ๋ง์ฝ ๋น์ ์ด
์ค์ฉ์ ์ธ ๊ด์ ์์์ ์ ํ:
-
๊ฐ์ฅ ์ผ๋ฐ์ ์ด๊ณ ๋น ๋ฅธ ์์: ๋ง์ฝ ๋น์ ์ ํ๋ก์ ํธ๊ฐ ROS ๋ฐ์คํฌํ ํ๊ฒฝ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ํ์๋ก ํ๊ณ , ์ด๋ฏธ์ง ํฌ๊ธฐ์ ํฌ๊ฒ ๋ฏผ๊ฐํ์ง ์๋ค๋ฉด
FROM ros:humble-ros-desktop์ด ๊ฐ์ฅ ๋จ์ํ๊ณ ํจ์จ์ ์ ๋๋ค. "ํ ๋ฒ์ ์ฒ๋ฆฌ"ํ๋ค๋ ์ธก๋ฉด์์ ์ข์ต๋๋ค. -
์ธ๋ถ ์ ์ด ๋ฐ ์ต์ ํ: ๋ง์ฝ ๋น์ ์ด ์ต์ข ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ์ต์ํํด์ผ ํ๊ฑฐ๋, ํน์ ROS ํจํค์ง๋ง ์ค์นํ๊ณ ์ถ์ ๋, ํน์ ๋น๋ ๊ณผ์ ์ ํน์ ๋จ๊ณ์์ ์ถ๊ฐ์ ์ธ ์ปค์คํฐ๋ง์ด์ง์ ํ๊ณ ์ถ์ ๋๋
FROM ros:humble-ros-baseํ ํ์ํ ํจํค์ง๋ฅผRUN apt install๋ก ์ถ๊ฐํ๋ ๋ฐฉ์์ด ๋ ๊ฐ๋ ฅํ๊ณ ์ ์ฐํฉ๋๋ค. ์ด๋ ๋ง์น ๋ ๊ณ ๋ธ๋ก์ฒ๋ผ ๋ด๊ฐ ์ํ๋ ๊ตฌ์ฑ ์์๋ฅผ ์ ํํด์ ์กฐ๋ฆฝํ๋ ๋ฐฉ์์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
์ ๊ณต๋ Dockerfile์ ros-humble-ros-base๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ros-humble-desktop์ ๋ช
์์ ์ผ๋ก ์ค์นํ๋๋ฐ, ์ด๋ ์๋ง๋ ๋น๋ ๊ณผ์ ์ ํฌ๋ช
์ฑ๊ณผ ์ ์ด๋ ฅ์ ๋์ด๋ ค๋ ์๋์ผ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์ฌ์ฉ์๊ฐ apt install ๋ถ๋ถ์ ์์ ํ์ฌ ๋ค๋ฅธ ROS ํจํค์ง๋ฅผ ์ค์นํ๊ฑฐ๋, ๋ถํ์ํ ๊ฒ์ ์ ๊ฑฐํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์ต์ ํํ๊ธฐ์ ์ฉ์ดํฉ๋๋ค.