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 |
|---|