Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

ROS melodic で ARマーカーを検出するための環境設定 ① Unbuntu 上で Docker コンテナを立ち上げるまで

はじめに

初めてROSを触る人が、DockerでROSのコンテナを立ち上げてARマーカーをUSBカメラで検出するまでの流れを記録として残します。
ROS melodicのDocekrイメージのPullから、ar-track-alvarパッケージの動作確認までが目標です。

この記事では、X serverを用いたGUI環境と、USBカメラのデバイス情報を設定してROS melodicコンテナをrun するところまで紹介します。

環境

環境
OS Ubuntu 18.04 LTS
プロセッサ Intel Core i7-6700HQ CPU
RAM 8GB
GPU GeForce GTX960M
ROS melodic

このシリーズについて

複数回に分けて紹介します。

0. 環境設定編(Windows10にUbuntuをデュアルブートして、Dockerをセットアップする)
1. ROSのコンテナを作成する この記事です
2. AR検出用のパッケージをセットアップする

docker imageのインストール

ROS1の中では melodicが最新なのでイメージをインストールします
ターミナルで以下を実行してください。

イメージのダウンロード
$ docker pull {image-name:tag-name}$ docker pull orsf/ros:melodic-desktop-full-bionic

タグの中身の違いは現状わかっていません。
例えば、stretchとか検索するとraspbianというワードが出るから、リソース小さいマシン用なのかな?

ちなみにpull済のイメージ一覧は次のコマンドで知ることができます。

pull済のイメージの確認
$ docker image ls

container の起動

イメージからコンテナを作成します。
このときに外部接続の設定と、USB deviceの設定をしないとROSコンテナ内でGUI画面が出てきません。

(エラーメッセージ cannot connect X server とか、カメラ画像が出てこない事象に悩みます。)

docker tutorialのスクリプトを参考にrun スクリプトで設定を
行いました。

コンテナのrun
$ docker run -it \
    --env="DISPLAY" \
    --env="QT_X11_NO_MITSHM=1" \
    --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
    --device="/dev/video2:/dev/video2" \
    --name="AR_Env" \
    osrf/ros:melodic-desktop-full-bionic \
    rqt
export containerId=$(docker ps -l -q)

devicename, 使うイメージは適宜読み替えてください。
次の項で、デバイス情報取得で調べ方を記述します。

usbカメラデバイスdeviceの情報取得

こちらを参考にさせていただきました

Ubuntu側でUSBデバイスの確認
$ lsusb

コマンドがないときは、

$ apt-get install lsusb

でインストールできます

これだとPCのビルトインcamの情報が出ました
$ v4l2-ctl -d /dev/video0 --all

私の環境の場合、/dev/video2がusbcamだったのでこちらの情報を使っています。

X severの準備

noVNCとか使いたかったのですが、いまのところ難しかったのでdocker tutorialより
シンプルだけど、安全でない 方法でとりあえず動かします。

runのスクリプトを実行する前に、Ubuntu側のX server設定を変更しておきます。

$ xhost +local:root

Ubuntuを立ち上げる都度設定してあげないと、作ったコンテナがstart しないという事態を経験します。
そうゆうときは

conteinorのlogを確認
$ docker logs {container name}

で何が起こっているか見ることができます。(Xseverに繋がらないからstartできない、とか)

コンテナのrunスクリプトを実行すると起動します。deviceで設定したUSBカメラを接続していないとコンテナがstartしないのでご注意ください。

おわりに

USBカメラを接続した状態でROSのコンテナが起動でき、撮影した画像をGUIで表示する準備ができました。

yoshikee
研究開発職の会社員です。主に趣味で(たまに仕事でも)プログラミングをやっています。自分が作業していてつまづいたところを、まとめています。アドバイスいただけるとうれしいです!
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away