articles:ros_docker

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
articles:ros_docker [2024/01/24 14:35] – [nvidia_ros_noetic の今回の使い方] Takashi Suehiroarticles:ros_docker [2025/01/13 17:37] (現在) – 削除 Takashi Suehiro
行 1: 行 1:
-====== ROS Docker ====== 
-参考: 
-  * [[https://www.techlife-hacking.com/?p=1117|DockerでGPUやGUIを使えるROSの環境構築]] 
-  * [[https://github.com/turlucode/ros-docker-gui||ROS Docker]] 
-===== Docker ===== 
  
-参考:https://docs.docker.com/engine/install/ubuntu/ 
- 
-aptの設定 
-<code shell> 
-# Add Docker's official GPG key: 
-sudo apt-get update 
-sudo apt-get install ca-certificates curl gnupg 
-sudo install -m 0755 -d /etc/apt/keyrings 
-curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg 
-sudo chmod a+r /etc/apt/keyrings/docker.gpg 
- 
-# Add the repository to Apt sources: 
-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-get update 
- 
-</code> 
-dockerのインストール 
-<code shell> 
-sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 
- 
-</code> 
-NVIDIA Container Toolkitのインストール\\ 
-https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html 
- 
-aptの設定 
-<code shell> 
-curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ 
-  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ 
-    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ 
-    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list \ 
-  && \ 
-    sudo apt-get update 
-</code> 
-インストー 
-<code shell> 
-sudo apt-get install -y nvidia-container-toolkit 
-</code> 
-dockerを一般ユーザで使えるようにする 
-<code shell> 
-sudo usermod -aG docker jibun 
-</code> 
-===== ros-docker-gui ===== 
-参考: 
-  * [[https://www.techlife-hacking.com/?p=1117|DockerでGPUやGUIを使えるROSの環境構築]] 
-  * [[https://github.com/turlucode/ros-docker-gui||ROS Docker]] 
- 
- 
- 
-githubからのダウンロード 
-<code shell> 
-$ git clone https://github.com/turlucode/ros-docker-gui.git 
-</code> 
-<code shell> 
-$ cd ros-docker-gui 
-$ ls 
-LICENSE  Makefile  Readme.md  assets  cpu  nvidia  tools 
-</code> 
-サポートされているコンテナを調べる 
-<code shell> 
-$ make 
-help                                       This help. 
-nvidia_ros_indigo                          [NVIDIA] Build ROS  Indigo  Container 
- 
-. 
-. 
-nvidia_ros_kinetic                         [NVIDIA] Build ROS  Kinetic Container 
-. 
-. 
-nvidia_ros_melodic                         [NVIDIA] Build ROS  Melodic Container 
-nvidia_ros_melodic_cuda10                  [NVIDIA] Build ROS  Melodic Container | (CUDA 10     - no cuDNN) 
-nvidia_ros_melodic_cuda10-1                [NVIDIA] Build ROS  Melodic Container | (CUDA 10.1   - no cuDNN) 
-nvidia_ros_melodic_cuda10_cudnn7           [NVIDIA] Build ROS  Melodic Container | (CUDA 10     - cuDNN 7) 
-nvidia_ros_melodic_cuda10-1_cudnn7         [NVIDIA] Build ROS  Melodic Container | (CUDA 10.1   - cuDNN 7) 
-nvidia_ros_melodic_cuda11-4-2              [NVIDIA] Build ROS  Melodic Container | (CUDA 11.4.2 - no cuDNN) 
-nvidia_ros_melodic_cuda11-4-2_cudnn8       [NVIDIA] Build ROS  Melodic Container | (CUDA 11.4.2 - cuDNN 8) 
-nvidia_ros_noetic                          [NVIDIA] Build ROS  Noetic  Container 
-. 
-. 
-nvidia_ros_bouncy                          [NVIDIA] Build ROS2 Bouncy  Container 
-nvidia_run_help                            [NVIDIA] Prints help and hints on how to run an [NVIDIA]-based image 
-cpu_ros_indigo                             [CPU]    Build ROS  Indigo  Container 
-cpu_ros_kinetic                            [CPU]    Build ROS  Kinetic Container 
-cpu_ros_melodic                            [CPU]    Build ROS  Melodic Container 
-cpu_ros_noetic                             [CPU]    Build ROS  Noetic  Container 
-cpu_run_help                               [CPU]    Prints help and hints on how to run an [CPU]-based image 
-tools_vscode                               [Tools]  Create a new image that contains Visual Studio Code. Use it as "make tools_vscode <existing_docker_image>". 
-tools_canutils                             [Tools]  Create a new image that contains Canutils. Use it as "make tools_canutils <existing_docker_image>". 
-tools_cannelloni                           [Tools]  Create a new image that contains Cannelloni. Use it as "make tools_cannelloni <existing_docker_image>". 
-tools_cmake                                [Tools]  Create a new image that contains CMake. Use it as "make tools_cmake <existing_docker_image>". 
-</code> 
-サポートされているものが多数あるのでどれが良いかわからないが 
-とりあえずシンプルに nvidia_ros_melodic を選択してみる. 
-<code shell> 
-$ sudo make nvidia_ros_melodic 
-</code> 
-かなり時間がかかる. 
- 
-最後に以下が表示されて完了となる. 
-<code> 
-Docker Image: turlucode/ros-melodic:nvidia 
-</code> 
- 
-==== 利用法の一般論 ==== 
- 
-実行前の処理 
-<code shell> 
-$ xhost + 
-</code> 
- 
-rootとしてログインする実行スクリプト(--rm オプションは終了時にcontainerを削除するので注意) 
-<code shell> 
-docker run --gpus all -it --rm --name=ros_melodic \ 
-       --privileged --net=host --ipc=host \ 
-       -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY \ 
-       -v $HOME/.Xauthority:/home/$(id -un)/.Xauthority \ 
-       -e XAUTHORITY=/home/$(id -un)/.Xauthority \ 
-       turlucode/ros-melodic:nvidia 
-</code> 
-一般ユーザでログインする実行スクリプト(--rm オプションは終了時にcontainerを削除するので注意) 
- 
-ホスト側ユーザと同じ名前,IDのユーザをコンテナ側にも作成する 
-<code shell> 
-docker run -it --gpus all --rm --privileged --net=host --ipc=host \ 
-  -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY \ 
-  -v $HOME/.Xauthority:/home/$(id -un)/.Xauthority -e XAUTHORITY=/home/$(id -un)/.Xauthority \ 
-  -e DOCKER_USER_NAME=$(id -un) \ 
-  -e DOCKER_USER_ID=$(id -u) \ 
-  -e DOCKER_USER_GROUP_NAME=$(id -gn) \ 
-  -e DOCKER_USER_GROUP_ID=$(id -g) \ 
-  -e ROS_IP=127.0.0.1 \ 
-  turlucode/ros-melodic:nvidia 
-</code> 
-入ってから, 
-<code shell> 
-> sudo apt update 
-> sudo apt upgrade 
-</code> 
-この後,turtlebot3関連のパッケージをインストールすれば良い. 
- 
-ユーザのローカルディスクのマウントオプション 
-<code> 
-# for root user 
--v $HOME/<some_path>/catkin_ws:/root/catkin_ws 
-# for local user 
--v $HOME/<some_path>/catkin_ws:/home/$(id -un)/catkin_ws 
-</code> 
- 
-==== nvidia_ros_melodicの今回の使い方 ==== 
-実行前の処理 
-<code shell> 
-$ xhost + 
-</code> 
- 
-rootとしてログインする実行スクリプト(containerを残すため--rmをなくす): run_ros_melodic.sh 
-<code shell> 
-docker run --gpus all -it --name=ros_melodic \ 
-       --privileged --net=host --ipc=host \ 
-       -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY \ 
-       -v $HOME/.Xauthority:/home/$(id -un)/.Xauthority \ 
-       -e XAUTHORITY=/home/$(id -un)/.Xauthority \ 
-       turlucode/ros-melodic:nvidia 
-</code> 
- 
-containerのrootとしてやるべきことをやる. 
-  * aptのupdate,upgrade 
-  * その他,パッケージのインストール(これは後からでもできる) 
-  * ユーザの追加.ホスト側に合わせておくと楽かも. 
-  * ユーザのパスワード設定 
-  * ユーザをsudoグループに追加 
- 
-<code shell> 
-> apt update 
-> apt upgrade 
-> apt install emacs 
-> useradd -u 1000 ts 
-> passwd ts 
-> usermod -G sudo ts 
-</code> 
-とりあえずsudoできるユーザを作成しておけば後は比較的自由にできる. 
- 
-上記containerを抜けて新しいイメージの保存する. 
-<code> 
-$ docker commit melodic melodic:01 
-</code> 
- 
-このあとは新たに作成したmelodic:01イメージに一般ユーザでログインする. 
- 
-ホスト側にソースコードなどを残したいのでホスト側でディレクトリを作り 
-それをcontainer側でマウントする. 
-<code shell> 
-$ mkdir ros_melodic 
-</code> 
-container名として同じros_melodicを使うのでros_melodicを消しておく. 
- 
-<code shell> 
-$ docker container rm ros_melodic 
-</code> 
- 
-ros_melodic:01を使ってユーザtsで/home/ts/ros_melodicをマウントしてcontainerを走らせる. 
-(run_ros_melodic_4.sh) 
- 
-**このスクリプトは,startのたびに深くsu tsするためおかしな状態になるので使えない.** 
-<code shell> 
-docker run -it --gpus all \ 
-     --name ros_melodic\ 
-     --privileged=true --net=host --ipc=host \ 
-     -v $HOME/ros_melodic:/home/$(id -un)/ros_melodic \ 
-     -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY \ 
-     -v $HOME/.Xauthority:/home/$(id -un)/.Xauthority \ 
-     -e XAUTHORITY=/home/$(id -un)/.Xauthority \ 
-     -e DOCKER_USER_NAME=$(id -un) \ 
-     -e DOCKER_USER_ID=$(id -u) \ 
-     -e DOCKER_USER_GROUP_NAME=$(id -gn) \ 
-     -e DOCKER_USER_GROUP_ID=$(id -g) \ 
-     -e ROS_IP=127.0.0.1 \ 
-     ros_melodic:01 
-</code> 
-そこで以下のスクリプトで走らせる. 
- 
-<code shell> 
-docker run  -it --gpus all \ 
-     --name ros_melodic \ 
-     --privileged=true --net=host --ipc=host \ 
-     -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY \ 
-     -v $HOME/.Xauthority:/root/.Xauthority \ 
-     -e XAUTHORITY=/root/.Xauthority \ 
-     -e ROS_IP=127.0.0.1 \ 
-     -v $HOME/ros_melodic:/home/$(id -un)/ros_melodic \ 
-     ros_melodic:01 
- 
-</code> 
-この後は,su tsとして一般ユーザとしてrosbookの作業を行っていけばよい. 
- 
-containerを削除せずに続けて使えば変更が蓄積されていく. 
-<code shell> 
- 
-</code> 
-もう一つのスクリプト 
-<code shell> 
-docker run -ti --rm --name robosoft \ 
-     –v /home/ts:/home/ts:rw \ 
-     –privileged=true \ 
-     –workdir=/home/ts \ 
-     –e DISPLAY=:0 \ 
-     –v /tmp/.X11-unix:/tmp/.X11-unix \ 
-     –v /home/ts/.Xauthority:/root/.Xauthority \ 
-     –net=host \ 
-     robosoft:1.0 \ 
-   “bash”  
-</code> 
-スナップショットが必要であれば新たな名前でimageを作成する. 
- 
- Failed to load module "canberra-gtk-module" の対処法 
-<code> 
-$ sudo apt-get install libcanberra-gtk* 
-</code> 
-=== imageリスト === 
-  - ros_noetic:01 ユーザー作成,その他 
-  - ros_noetic:02 rosbook 3,4,5章 
- 
-==== nvidia_ros_noetic の今回の使い方 ==== 
-実行前の処理 
-<code shell> 
-$ xhost + 
-</code> 
- 
-rootとしてログインする実行スクリプト(containerを残すため--rmをなくす): run_ros_melodic.sh 
-<code shell> 
-docker run --gpus all -it --name=ros_noetic_01 \ 
-       --privileged --net=host --ipc=host \ 
-       -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY \ 
-       -v $HOME/.Xauthority:/home/$(id -un)/.Xauthority \ 
-       -e XAUTHORITY=/home/$(id -un)/.Xauthority \ 
-       turlucode/ros-noetic:nvidia 
-</code> 
- 
-containerのrootとしてやるべきことをやる. 
-  * aptのupdate,upgrade 
-  * その他,パッケージのインストール(これは後からでもできる) 
-  * ユーザの追加.ホスト側に合わせておくと楽かも. 
-  * ユーザのパスワード設定 
-  * ユーザをsudoグループに追加 
- 
-<code shell> 
-> apt update 
-> apt upgrade 
-> apt install emacs 
-> apt install ros-noetic-turtlebot3-gazebo 
-> apt install gnome-terminal 
-> apt install python-is-python3 
-> adduser ts 
-> usermod -G sudo ts 
-> cp /etc/skel/.bashrc /home/ts 
-> cp /etc/skel/.bash_logout /home/ts 
-> cp /etc/skel/.profile /home/ts 
-> cd /home/ts 
-> chown ts:ts . .bashrc .bash_logout .profile 
-> su ts 
-$ cd 
-$ echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc 
-</code> 
-とりあえずsudoできるユーザを作成しておけば後は比較的自由にできる. 
- 
-上記containerを抜けて新しいイメージの保存する. 
-<code> 
-$ docker commit ros_noetic_01 ros_noetic:01 
-</code> 
- 
-このあとは新たに作成したros_noetic:01イメージに一般ユーザでログインする. 
- 
-ホスト側にソースコードなどを残したいのでホスト側でディレクトリを作り 
-それをcontainer側でマウントする. 
-<code shell> 
-$ mkdir ros_noetic 
-</code> 
- 
- 
-ros_melodic:01を使ってユーザtsで/home/ts/ros_melodicをマウントしてcontainerを走らせる. 
-(run_ros_melodic_4.sh) 
- 
-**このスクリプトは,startのたびに深くsu tsするためおかしな状態になるので使えない.** 
-<code shell> 
-docker run -it --gpus all \ 
-     --name ros_melodic\ 
-     --privileged=true --net=host --ipc=host \ 
-     -v $HOME/ros_melodic:/home/$(id -un)/ros_melodic \ 
-     -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY \ 
-     -v $HOME/.Xauthority:/home/$(id -un)/.Xauthority \ 
-     -e XAUTHORITY=/home/$(id -un)/.Xauthority \ 
-     -e DOCKER_USER_NAME=$(id -un) \ 
-     -e DOCKER_USER_ID=$(id -u) \ 
-     -e DOCKER_USER_GROUP_NAME=$(id -gn) \ 
-     -e DOCKER_USER_GROUP_ID=$(id -g) \ 
-     -e ROS_IP=127.0.0.1 \ 
-     ros_melodic:01 
-</code> 
-そこで以下のスクリプトで走らせる. 
- 
-<code shell> 
-docker run  -it --gpus all \ 
-     --name ros_noetic_02 \ 
-     --privileged=true --net=host --ipc=host \ 
-     -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY \ 
-     -v $HOME/.Xauthority:/root/.Xauthority \ 
-     -e XAUTHORITY=/root/.Xauthority \ 
-     -e ROS_IP=127.0.0.1 \ 
-     -v $HOME/ros_noetic:/home/$ts/ros_noetic \ 
-     ros_noetic:01 
- 
-</code> 
-この後は,su tsとして一般ユーザとしてrosbookの作業を行っていけばよい. 
- 
-containerを削除せずに続けて使えば変更が蓄積されていく. 
- 
-以下のエラーメッセージへの対応. 
-<code shell> 
-Couldn't connect to accessibility bus: Failed to connect to socket /run/user/1000/at-spi/bus_1: No such file or directory 
-</code> 
-.bashrcに以下を記述 
-<code shell> 
-# disable to display dbind-WARNING 
-export NO_AT_BRIDGE=1 
-</code> 
- 
-もう一つのスクリプト 
-<code shell> 
-docker run -ti --rm --name robosoft \ 
-     –v /home/ts:/home/ts:rw \ 
-     –privileged=true \ 
-     –workdir=/home/ts \ 
-     –e DISPLAY=:0 \ 
-     –v /tmp/.X11-unix:/tmp/.X11-unix \ 
-     –v /home/ts/.Xauthority:/root/.Xauthority \ 
-     –net=host \ 
-     robosoft:1.0 \ 
-   “bash”  
-</code> 
-スナップショットが必要であれば新たな名前でimageを作成する. 
- 
- Failed to load module "canberra-gtk-module" の対処法 
-<code> 
-$ sudo apt-get install libcanberra-gtk* 
-</code> 
-=== imageリスト === 
-  - ros_noetic:01 ユーザー作成まで 
-  - ros_noetic:02 rosbook 3,4,5 
-  - ros_noetic:03 wanderbot, teleopbot 
-  - ros_noetic:04 followbot, mapping 
-  - ros_noetic:05 navigation, patrol 
-  - ros_noetic:06 stockroomの途中.失敗 
-  - ros_noetic:07 tortoise 
-  - ros_noetic:08 cougar 
-  - ros_noetic:09 jaka 
- 
-==== nvidiaのcontainerが動かなくなった ==== 
-containerをstartさせたり,imageからrunしようとしても以下のようなエラーで立ち上がらなくなった. 
-<code> 
-.... 
-nvidia-container-cli: initialization error: nvml error: driver/library version mismatch: unknown. 
-</code> 
- 
-対策: 
-  - 再起動 
-  - ドライバーの入れ直し.https://ryo-iijima.com/nvidia-smi-version-mismatch/ 
- 
-1が楽. 
-===== docker-ros-desktop-vnc ===== 
-これはubuntu22.04ベース固定であまり使えなそう. 
- 
-ちょとお試しという感じ. 
- 
-参考: 
-  * https://zukucode.com/2019/04/docker-non-root-user.html 
-  * https://github.com/Tiryoh/docker-ros-desktop-vnc 
- 
-<code> 
-$ sudo docker run -p 6080:80 --shm-size=512m tiryoh/ros-desktop-vnc:melodic 
-</code> 
-===== ubuntu18.04 ===== 
- 
-参考: 
-  * https://own-search-and-study.xyz/2020/05/02/docker-container-ubuntu-desktop-rdp/ 
-  * https://hub.docker.com/r/rosyuku/ubuntu-rdp 
- 
-これから調査 
- 
-素のubuntu desktop環境から始めれば自由度が高いかもしれない 
- 
-と思ったが,何も(xとかも)入っていないので環境構築に苦労しそうl 
  • articles/ros_docker.1706074500.txt.gz
  • 最終更新: 2024/01/24 14:35
  • by Takashi Suehiro