🛠️

dockerを調べてみながらrosを起動してみる

2023/09/05に公開

dockerを使うことがあったので、詳しく知るためにまとめてみることにした。
<環境> Ubuntu 22.04
インストールに関してはここにある通りに行いました。

参考にさせてもらった文献

とても詳しく書かれているため非常によい勉強になると思います。これ以上わかりやすいものはないので、用語等の説明は省きます。

docker Hubで使いたいイメージを探す

docker Hubに移動して実際に探してみます。
docker Hubは、docker用のgithubのようなものです。今回使いたいのは、Ubuntu18にRos-melodicが入ったイメージなので探してみます。ここにありました。これをpull、起動していきたいと思います。

dockerで起動

まずはイメージを持ってきたいと思います。

$ docker pull ros:melodic

一様確認してみましょう

$ docker images
REPOSITORY TAG     IMAGE ID       CREATED         SIZE
ros        melodic 70b924cfe48d   2 months ago    1.28GB

rocker 導入

イメージは持ってこれましたが、GUIを使えるようにしたいと思います。rockerでこれを起動できるようにしたいと思います。インストールするには、以下の通り

$ sudo apt-get install python3-rocker

rocker 起動

それでは、一度起動してみようと思います。

$ rocker --nvidia --x11 --user --network host --privileged --nocleanup --name first ros:melodic

--nvidia : GPUを有効にする
--x11 : X11を有効にしてGUIを使えるようにする
--network host : ホストPCとネットワークを共有して他PCとROS2通信したり、Ethernetのデバイスを使ったりする
--privileged : USBデバイスなどを使えるように
--nocleanup : コンテナstop時にコンテナが削除されないようにする
--name first : コンテナに名前をつける
ros:melodic : 起動するdocker imageの"REPOSITORY:TAG"

rviz 起動

すると、起動できたと思います。それでは、実際rviz等が立ち上がるか見てみましょう。

$ rviz
bash: rviz: command not found

どうやら、rvizが入っていないようです。なので、rvizを入れたいと思います。

$ sudo apt update
$ sudo apt install ros-melodic-rviz

別でターミナルを起動して、roscoreを立ち上げて、rvizが立ち上がるか確認してみます。

別ターミナル
$ rocker --nvidia --x11 --user --network host --privileged --nocleanup ros:melodic
$ roscore
元のターミナル
$ rviz

すると、rvizが無事立ち上がったと思います。rviz

最後に

コンテナの起動

exitで抜けた後、先程のコンテナ(name: first)を起動したい場合は,以下のようにします。

$ docker start first
$ docker attach first

また、このコンテナで行った変更をdocker imageにしたい場合(今回はros-rvizという名前のイメージを作成します)

dockerとは別ターミナル
$ docker commit first ros-rviz:melodic

それでは、確認してみてください。

dockerとは別ターミナル
$ docker images
REPOSITORY       TAG     IMAGE ID       CREATED          SIZE
ros-rviz         melodic 3662abc388b9   10 seconds ago   1.49GB
ros              melodic 70b924cfe48d   2 months ago     1.28GB

このようになっていたら成功です。
いらなくなったdocker imageはdocker rmiで削除できるので、以下のように消してください。

dockerとは別ターミナル
$ docker rmi 70b924cfe48d
岐阜大学アレックス研究室

Discussion