드론/ROS

# 0 Docker를 활용한 ROS1 개발환경 구축

네 말이 옳다 2026. 4. 26. 23:17

Docker를 이용해 PC의 구성 환경을 분리할 수 있습니다.

Ubuntu 20.04에서 가상환경을 이용해 ROS1 개발환경을 구축하고 ROS2와 동시에 설치될 수 있도록 하겠습니다.


1. Docker설치

PC에서 ROS1과 2를 구동하기 위해서는 Docker를 사용해 환경을 분리해야 합니다.
두개를 동시에 설치하면 의존성 문제로 충돌할 가능성이 있기 때문이죠.

먼저 Docker를 설치하겠습니다.

sudo apt-get update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginsudo apt install -y docker-ce dsudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginocker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

2. ROS1 설치

Rviz 및 GUI가 포함된 ROS1을 설치해야하기 때문에 desktop/full 을 설치하겠습니다.

docker pull osrf/ros:noetic-desktop-full

3. Docker 실행

호스트의 X서버가 컨테이너와 통신할 수 있도록 허용하기 위해 X11 forwarding을 활성화 합니다.

xhost +local:docker

docker를 실행합니다.

sudo docker run -dit \
  --name ros1 \
  --network host \
  --privileged \
  -v=/dev:/dev \
  --device /dev/dri \
  -e DISPLAY=$DISPLAY \
  -e LIBGL_ALWAYS_SOFTWARE=1 \
  -v /tmp/.X11-unix:/tmp/.X11-unix:rw \
  -v ~/catkin_ws:/root/catkin_ws \
  osrf/ros:noetic-desktop-full \
  bash

 

명령어를 하나하나 살펴본다면

  • -dit : 백그라운드 실행으로 Container에서 터미널 명령을 사용할 수 있게 하는 옵션
  • --name ros1 : Container의 이름을 ros1으로 설정
  • --network host : Host의 네트워크를 그대로 사용
  • --privileged: Container에서 시스템의 주요 자원에 접근
  •  -v= /dev:/dev : /dev 폴더가 Host의 /dev 폴더에 연결
  • --device /dev/dri : 그래픽 관련 장치 사용
  • -e DISPLAY=$DISPLAY \ : Host에 GUI를 출력하도록 함
  • -v /tmp/.X11-unix:/tmp/.X11-unix:rw : Host에 GUI를 출력하도록 함
  • -v ~/catkin_ws:/root/catkin_ws : Host의 ~/catkin_ws 폴더를 컨테이너 /root/catkin_ws 와 연결
  • osrf/ros:noetic-desktop-full : 사용할 이미지 이름

이후에 어떻게 사용할지에 따라서 유연하게 변경하도록 하겠습니다.


4. Rviz로 가시화

Rviz에서 정상적으로 토픽이 발행되는지 확인합니다.

#터미널 1번
sudo docker exec -it ros1 bash
source /opt/ros/noetic/setup.bash
roscore

#터미널 2번
sudo docker exec -it ros1 bash
source /opt/ros/noetic/setup.bash
rviz

 

#터미널 3번
sudo docker exec -it ros1 bash
source /opt/ros/noetic/setup.bash

rostopic pub /visualization_marker visualization_msgs/Marker "header:
  frame_id: 'map'
ns: 'test'
id: 0
type: 2
action: 0
pose:
  position: {x: 1.0, y: 0.0, z: 0.0}
  orientation: {x: 0.0, y: 0.0, z: 0.0, w: 1.0}
scale: {x: 0.2, y: 0.2, z: 0.2}
color: {a: 1.0, r: 0.0, g: 1.0, b: 0.0}" -r 10

정상적으로 토픽이 가시화 되는 것을 확인 할 수 있습니다.


5. Serial 통신 확인

Serial 통신이 재대로 되는지도 확인해보겠습니다.
테스트용으로 사용하고 있는 Cube orange+를 usb로 연결하겠습니다.

ls /dev/tty*

가상환경 내에서 /dev/ttyACM0가 정상적으로 인식되는 것을 확인 할 수 있습니다

'드론 > ROS' 카테고리의 다른 글

#1 ROS Sensor Topic  (0) 2026.05.02