スキップしてメイン コンテンツに移動

Docker ROS (noetic) - 1-turtlesim

조건:

- Ubuntu 20.04 + ROS noetic

- 디바이스 접근

- 네트워크 통신

- GUI (RVIZ, Gazebo)

- 작업 공간 공유

 

1. 작업 디렉토리 생성

mkdir ~/ros_noetic_docker
cd ~/ros_noetic_docker

2. 필요한 파일 생성

# Dockerfile 생성
touch Dockerfile

# entrypoint.sh 생성
touch entrypoint.sh
 
# run_container.sh 생성
touch run_container.sh

3. 파일구조

~/ros_noetic_docker/
├── Dockerfile
├── entrypoint.sh
└── run_container.sh

4. gedit Dockerfile

FROM osrf/ros:noetic-desktop-full

# 기본 도구 설치
RUN apt-get update && apt-get install -y \
    vim \
    wget \
    git \
    bash-completion \
    build-essential \
    python3-pip \
    && rm -rf /var/lib/apt/lists/*

# ROS 환경 설정
RUN echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc

# 작업 디렉토리 설정
WORKDIR /workspace

# 컨테이너 진입점 설정
COPY entrypoint.sh /
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD ["bash"]

5. gedit entrypoint.sh

#!/bin/bash
# entrypoint.sh

# ROS 마스터 URI 설정 (호스트 네트워크 사용 시)
if [ -n "$ROS_MASTER_URI" ]; then
    echo "export ROS_MASTER_URI=$ROS_MASTER_URI" >> ~/.bashrc
fi

if [ -n "$ROS_IP" ]; then
    echo "export ROS_IP=$ROS_IP" >> ~/.bashrc
fi

# 진입점 실행
exec "$@"

6. gedit run_container.sh

#!/bin/bash
# run_container.sh

# X11 포워딩을 위한 설정
XAUTH=/tmp/.docker.xauth
touch $XAUTH
xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -

docker run -it \
    --name ros_noetic \
    --network host \
    --privileged \
    -v /dev:/dev \
    -e DISPLAY=$DISPLAY \
    -e XAUTHORITY=$XAUTH \
    -v $XAUTH:$XAUTH \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    -v $HOME/catkin_noetic:/workspace \
    ros_noetic_image

7. 실행 권한 부여

chmod +x entrypoint.sh
chmod +x run_container.sh

8. Catkin 작업공간 생성

# Catkin 작업공간 생성
mkdir -p ~/catkin_noetic/src
cd ~/catkin_noetic

9. 도커 이미지 빌드 및 실행

# 이미지 빌드
cd ~/ros_noetic_docker
docker build -t ros_noetic_image .

# 컨테이너 실행
./run_container.sh

10.컨테이너 내의 작업 공간 초기화

cd /workspace
catkin_make
echo "source /workspace/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc 

11. 터틀봇 예제 실행

# ROS 버전 확인
rosversion -d

# roscore 실행
roscore

12. 새터미널 열기

docker exec -it ros_noetic bash
rosrun turtlesim turtlesim_node

아래와 같은 화면이 나오면 성공 


 

13. 컨테이너 종료

# 컨테이너 종료
docker stop ros_noetic

# 실행 중인 컨테이너 목록 확인
docker ps

# 모든 컨테이너 목록 확인 (종료된 것 포함)
docker ps -a

# 다음 사용시 컨테이너 재시작
docker start ros_noetic

# 재시작된 컨테이너에 접속
docker exec -it ros_noetic bash

コメント

このブログの人気の投稿

[참고] ROS kinetic에서 WebCam 사용하기 (Ubuntu 16.04)

Reference: 1. https://github.com/bosch-ros-pkg/usb_cam/issues/53  2. http://zumashi.blogspot.jp/2016/12/ros-kinetic-usb-cam.html  3. http://cafe.naver.com/openrt/5963 위의 사이트들을 참고하여 ROS Kinetic에서 Logitech WebCam C270의 동작을 확인했습니다. $ cd ~/catkin_ws/src $ git clone https://github.com/bosch-ros-pkg/usb-cam.git $ cd .. $ catkin_make WebCam test $ roscore $ rosrun usb_cam usb_cam_node $ rosrun image_view image_view image:=/usb_cam/image_raw $ rosrun rviz rviz 1) By display type>rviz>image 2) Image topic: /usb_cam/image_raw --> 왼쪽 하단과 같이 WebCam이 잘 동작하는 것을 확인했습니다.

[vscode] TImeout waiting for debugger connection

이제까지 잘 동작하던 비주얼 스튜디오 코드가 위와 같은 에러 메세지를 내면서 갑자기 디버깅이 안되서 인터넷을 검색한 결과.. vscode의 User Setting에서 검색창에 python.terminal.activateEnvironment을 입력하여 true로 설정되어 있는 값을 false로 변환하면 된다. 

Anaconda을 이용하여 ROS + Tensorflow 함께 사용하기

-- CUDA, cuDNN 버전확인 https://stackoverflow.com/questions/41714757/how-to-find-cuda-version-in-ubuntu/42122965 $ nvcc --version cuda8.0, cudnn6.0 -- 아나콘다 python2.7 버전 인스톨 https://www.anaconda.com/download/#linux python3.x이랑 ROS 같이 써보려고 했는데, 아직 실력이 부족해서 그런지 실패.. $ bash Anaconda2-5.3.0-Linux-x86_64.sh $ source ~/.bashrc $ python -V Python 2.7.15 :: Anaconda, Inc. $ conda create -n tf14 pip python=2.7 $ source activate tf14 -- ROS 관련 패키지 인스톨 (tf14) $ pip install --upgrade pip (tf14) $ pip install -U rosinstall msgpack empy defusedxml netifaces --CUDA, cuDNN, CPU/GPU을 사양에 맞춰서 tensorflow download https://github.com/mind/wheels#mkl (tf14) $ pip install tensorflow-1.4.0-cp27-cp27mu-linux_x86_64.whl 잘 설치가 되었는지 Hello, tensorflow 실행 (tf14) $ python Python 2.7.15 |Anaconda, Inc.| (default, May  1 2018, 23:32:55) [GCC 7.2.0] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> i...