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

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로 변환하면 된다. 

日常の話

今年の夏は本当に暑かったですね。それで、我らもなるべく室内で活動しました。図書館で絵本を読んでいる長男さん。 カラオケ大会〜〜 漫画を読んでいた長女 長男はおもちゃで遊んでました。 魚べいで外食 橋コンテストで出品する作品を作る次女 長男が大好きなマインクラフトレゴ。官舎の壁は長男の落書きで大変な状態です。 お父さん、お母さんが作って下さった美味しい料理 お父さんのハヤシライスは美味しい! 頑張って運動している長男 親切に教えてくれた先生たち、ありがとうございました。 JAXA来年までメイン建物が運営しません!ご参考までに〜〜 長女と長男、図書室の中で〜〜