Ubuntu20.04がサポートされてない問題
以前、Ubuntu18.04でAzureKinectを動かしました。
20.04は公式でサポートされておらず、OSのバージョンアップに伴って若干トリックが必要になるので記事にしました。
1. ドライバのaptインストール
強引に18.04のバイナリをaptで落とします。なんと、20.04でも一応動くんですねぇ...。
$ curl -sSL https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
$ sudo apt-add-repository https://packages.microsoft.com/ubuntu/18.04/prod
$ curl -sSL https://packages.microsoft.com/config/ubuntu/18.04/prod.list | sudo tee /etc/apt/sources.list.d/microsoft-prod.list
$ curl -sSL https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
$ sudo apt update
$ sudo apt install libk4a1.4-dev
$ sudo apt install k4a-tools
厳密には、上記コマンドでver. 1.4.1がインストールされます。
警告メッセージも出ますが無視して強行して下さい。
(ちゃんと動きますが公式の推奨方法ではないので、手術ロボットとか自動運転とか人命に関わるような用途には使わないで下さいね…。万が一誤動作しても僕は責任取れませんよ…。)
2. ドライバの起動確認
まずカメラ(AzureKinect)をUSB接続しておきましょう。
割と電力を喰うので、外部コンセントから駆動電力を取れるバスパワー方式のUSB拡張ポートが必要です。
こういうの。通信速度も大事なので、USB3.0~3.1接続ができるやつを探してね。
下のAmazonリンク切れてたらごめん。
https://amzn.asia/d/8nyfTLj
USBでAzureKinectを繋いだら、
$ sudo k4aviewer
これでAzureKinectのウィンドウが立ち上がればインストールは成功しています!!
なんか失敗してますが、エラーメッセージは無視して強行します。
エラーは2回出現しますが両方ともDismissをクリック。
すると…
ここで左上にカメラのプロダクトナンバーが出ていればUSB接続認識に成功しています!
(sudoを付けないと上手く行きません。今からsudoが外せるよう対処します。)
緑色の"Open Device"ボタンを押して、カメラ接続を開始すると、AzureKinectが完全に起動するはずです。
3. sudoの外し方
ユーザー実行ルールを書き換えます。
まず、書き換え用のルールファイルを公式のgithubからダウンロードします。
https://github.com/microsoft/Azure-Kinect-Sensor-SDK/blob/develop/scripts/99-k4a.rules
右上の赤丸で囲ったダウンロードボタンを押してね。
ダウンロードしたら、
$ sudo cp ~/Downloads/99-k4a.rules /etc/udev/rules.d/
でダウンロードディレクトリにあるルールファイルを自分のマシンの深い階層に移動させます。
ここでルールを適用させるため、一旦再起動。
再起動したら、sudoなしで
$ k4aviewer
この「sudo無しでドライバが動く状態」は、roslauchコマンドでROSラッパーからAPI関数を呼ぶ際に必須になります。読み飛ばさず、必ず記事に従って下さい。
4. ROSノードのコンパイル
今回はROS wrapperとして公式の https://github.com/microsoft/Azure_Kinect_ROS_Driver を使います。
ただし、こちらも18.04しかサポートしてません。ま、20.04でそのまま動くけどね。
ROSの基本は分かっている前提とします。
身近にROS詳しい先輩がいなければ、記事内コメントでもTwitterDMでもメールでもLINEでも下さい。
(Twitter疲れたから最近あんま見てません m(_ _)m)
$ cd catkin_my_ws/src
$ git clone https://github.com/microsoft/Azure_Kinect_ROS_Driver
$ cd ..
$ catkin build azure_kinect_ros_driver
初心者にありがちなのが、ここでビルドでエラーが出たら、依存パッケージが足りてないのかも。
エラーした人は次のコマンドを試してみて下さい。基本的なROSパッケージしか依存してないから、過去にRealSenseとか使ったことがあれば必要ありません。僕は不要でした。
$ rosdep install -i -y -r --from-paths src
コンパイルに成功したら、新しいパッケージを入れたので、
$ source devel/setup.bash
これで全ての準備が完了です!お疲れ様でした!
5. ROSノードの実行
1つめのターミナルで、
$ roslaunch azure_kinect_ros_driver driver.launch
CPU,GPUの性能が低いと警告メッセージ(ros warn)がちらほら出るかも。まぁ少々なら大丈夫。
左半分がカメラドライバのノードのターミナル。
このlaunchファイルだけではRVizは立ち上がらないので、別ターミナルでRVizを起動。(右半分)
RVizのGlobalOptionで表示するtf frameをcamera_baseにセットして、PointCloud2形式のトピック /points2 をsubscribeすれば、このように色付き点群が表示されます!!
あとは自分の画像認識ノードでsubscriberを配備するなり、煮るなり焼くなりご自由に。
以上、Ubutnu20.04 + ROS NoeticでもAzureKinectを動かす方法でした。
特に難しくありませんが、日本語の記事が見つからなかったので一応。
参考:https://github.com/microsoft/Azure-Kinect-Sensor-SDK/issues/1263