Azure KinectをROS melodicとDockerを使って動かしてみた


はじめに

はじめまして。

関東の大学の制御系研究室に所属している学部4年のしゅんもです。研究室の先輩方の影響を受けて、Qiitaを始めてみました。

Dockerとは

Dockerとは、仮想環境を構築するためのプラットフォームです。

Kinect V2やRealSenseなどのハードウェアや、Mask R-CNNやOpenPoseといったソフトウェアを動かすためには、必要なSDKやドライバ等をインストールする、環境構築と呼ばれる作業が必要です。

環境構築は、ソフトウェアのバージョンによってうまく動かなかったり、もともと入っている別のソフトウェアと干渉して不具合が生じてしまったりと、意外と難しいものです。また、PCが故障したり、性能不足等の理由で別のPCを使いたい場合、再度この面倒な環境構築の作業を行う必要があります。

そこでDockerが活躍します。Dockerを使用すると、Dockerfileと呼ばれる、シェルスクリプトのようなファイルを使って自動的に環境構築を行えます。

しかも、これにより作成される環境は、ホストPCと完全に分離された仮想環境のため、ホスト環境を汚しません。そのため、上で述べた問題が生じにくく、環境の移行も容易です。

このような利点から、所属研究室でもDockerを導入する動きが盛んになってきており、私も今年の夏頃から始めました。

Azure Kinect DKとは

前置きが長くなりましたが、本題に入ります。

Azure Kinect DKとは、今年の7月頃からアメリカや中国なので販売開始されたRGB-Dカメラです。Kinect V2の後継機と呼ばれており、開発者用に多数のSDKが公開されています。

ただ、発売から間もないことから、情報が少なく、Azure KinectをDockerで動かしている人は見当たらなかったため、自分で作成してみました。Microsoftが公開しているDockerもあったのですが、SDKのインストールがされておらず、使えなかったです。

Dockerfileの作成

SDKのインストールだけ苦労したので、それだけ書きます。公式サイトに従ってインストールをしようとしたのですが、途中でEULAライセンスの承諾をする必要があり、Dockerのビルド中に止まってしまうという問題が発生しました。

これは、expectというコマンドでターミナル上の対話を自動化することで回避しました。

[2020/1/17追記]
timeoutの時間が短すぎると、対話になる前にインストールが打ち切られてしまい、buildがうまく行かない場合があるかもしれません。その場合は、timeoutを100とかにしてみてください。

#!/bin/sh
expect -c "
set timeout 10
spawn apt install -y libk4a1.3 libk4a1.3-dev k4a-tools
expect \"Do you accept the EULA license terms?\"
send \"yes\n\"
expect \"\\\$\"
exit 0

ダウンロード

下記リンクで公開しています。
https://github.com/Shunmo17/azure_kinect_docker

参考サイト

https://docs.microsoft.com/ja-jp/azure/Kinect-dk/sensor-sdk-download
https://qiita.com/ine1127/items/cd6bc91174635016db9b