更新
Ubuntu20.04版のインストール手順も書きました。
https://qiita.com/sunrise_lover/items/1a70ddafee44419eda2a
Azure Kinect + ROS
RealSenseに比べてちょっと大きいけど、2021年3月時点でRGB-Dカメラの最強角のひとつ。
この記事ではROSノードを立ち上げ、PointCloud2メッセージをRvizで表示するところまで実現します。
今回の環境はこちら↓
- Ubuntu 18.04
- ROS Melodic
(初投稿なのでご容赦下さい。コメント頂ければ更新するかと思います。)
ツイッターもフォローしてね♡
https://twitter.com/Crane_mk4
目次
- SDKのインストール (apt)
- ROSノードのビルド
- 実行
ステップ1:SDKのインストール
SDKを使えば、UbuntuがAzureKinectを認識してくれます(雑)。
細かい事は置いといて、とりあえず以下のコマンドをターミナルで順番に実行しましょう。
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
sudo apt-add-repository https://packages.microsoft.com/ubuntu/18.04/prod
sudo apt update
sudo apt install k4a-tools libk4a1.4-dev
この時点で一応 Azure Kinectを動かすことができます。正しくインストールされたか確認も含め、次のコマンドを試してみましょう。
必ずsudo権限で 試してください!!! (後ほどsudoを外せるよう工夫します)
sudo k4aviewer
左上のプルダウンに数字列があれば成功です。
(もし[No Devices]とあればカメラのUSB接続を疑いましょう。lsusb
コマンドでMicrosoft製のデバイスが表示されているか、USB接続は3.0か、電力の供給は十分か、などが怪しいです。正しく接続されていれば、lsusb
コマンドでMicrosoft製デバイスが5項目出現します。)
緑色の「Open Device」を押しましょう。
細かい設定を調節できます。解像度を上げれば高画質なRGB画像が取れますが、負荷も上がります。
とりあえず今はこのままで、緑色のStartボタンを押しましょう。
上のようにカメラが立ち上がります。View Modeを3Dにすると点群が立体表示されるので面白い…。
※エラー情報
replace_sample(). capturesync_drop, releasing capture early due to full queue TS: 614600 type:Depth
というエラーはケーブル接続の問題です。
PCの背面にあるUSBポートを使って、 マザーボードに直接挿して ください。
(Jetsonなどクソ雑魚GPUでも発生するらしいですが、RTX2080Tiや2080Super、3060など常識的な性能があれば大丈夫なので、まず最優先でUSB接続を疑ってください。)
ToFカメラなので照射が結構電源食います、必ず外部バスパワー電源を使ってください。
難点 : sudo権限でないと起動しない
これはROS周りで色々と面倒になるので、sudoなしでも起動できるよう改造する必要があります。
具体的には、「udevルールの変更」をします。
まず、適当な場所にSDKのコードをダウンロードします。
(結局ソース落とすなら最初からソースビルドすりゃええ話やけど、初心者対象なのでaptに甘えました)
mkdir src/camera_drivers
cd src/camera_drivers
git clone https://github.com/microsoft/Azure-Kinect-Sensor-SDK.git
こうしてgit上のソースコードがダウンロードします。
次に、scripts
フォルダの中にある99-k4a.rules
というファイルを、自分のターミナルが参照する実行ルールの場所にコピーしてあげましょう。
sudo cp Azure-Kinect-Sensor-SDK/scripts/99-k4a.rules /etc/udev/rules.d/
これでsudoを使わなくてもAzureKinectが開けるようになったはずです。
ルールを変更したので、PCを再起動しましょう。
(以下のコマンドでリロードすることもできますが、僕は上手くいかなかったので早々に諦めて再起動しました。
sudo udevadm control --reload-rules
sudo udevadm trigger
)
今ならsudoを付けなくてもAzureKinectが使えるようになっているはずです!試してみましょう。
k4aviewer
僕は動きました。
動かない人は研究室の強い先輩に泣きつくか、コメント欄へどうぞ。
次はこの映像や3D点群をROSトピックに流します。
ステップ2 : ROSノードのビルド
ROSノード(公式)を使えば、ROSのトピック通信を経由して、先ほどの点群を6D物体認識やSLAMなどに直接利用できます。
(ROS触ったことないよ!って人はここでAzureKinectは一旦置いといて、まずはROSについて知ってみたり、チュートリアルを触ってみると良いと思います。コメント欄でリクエストが多ければ、こんな幼稚な文才の僕が平たくROSについて書くかもしれません。)
まずはご自分の好みのcatkin workspaceへ移動して、そのままsrcディレクトリまで降りてください。
cd catkin_my_ws/src
git clone https://github.com/microsoft/Azure_Kinect_ROS_Driver
cd ..
そうすればソースコードがダウンロードされたはずので、次はいよいよビルドです。
catkin build azure_kinect_ros_driver
初心者にありがちなのが、ここでビルドでエラーが出たら、依存パッケージが足りてないのかも。
エラーした人は次のコマンドを試してみて下さい。
rosdep install -i -y -r --from-paths src
(僕はROS一年目の頃、この魔法のコマンドに何度救われたか分かりません。)
全依存パッケージが自動インストールされるはずなので、さっき失敗した人は改めて先ほどのcatkin build azure_kinect_ros_driver
を試してみて下さい。
これで失敗したら研究室の強い先輩に泣きつくか、コメント欄へどうぞ。
そうしたら新しいパッケージを入れたので、仕上げに環境変数の更新をしましょう。
source devel/setup.bash
これで全ての準備は整いました。
ステップ3 : 実行
これ↓を打つ。
roslaunch azure_kinect_ros_driver driver.launch
すると、ROSトピックにPointCloud2が流れ始める。
確認しましょう。別のターミナルを開き、rviz
コマンドでRvizを立ち上げます。
空っぽのRvizが立ち上がります。
左下のAddボタンで、表示したいトピックを選択します。
以下のように、By topicのタブの中から/ponts2 PointCloud2 というトピックを選択し、OKを押します。
座標系が異なるため、まだ何も映らないです。
GlobalOptionのmap
となっている項目を、プルダウンからcamera_base
に変更しましょう。
色付き点群が表示されました!おめでとう!
あとは平面検出なり物体検出なり、PCL+pcl-rosでご自由にお楽しみ下さい。
宣伝
色情報に基づく6D物体認識です。
https://www.youtube.com/watch?v=agjsPMJshy0
(ロボット研究の一部で作って、論文が通ったきり放置なので、かなりクソコードです。)
RANSACや特徴量検出を多用してますので、PCLの書き方サンプルくらいになれば…。
こちらもコメント欄で要望が多ければ、ちゃんとキレイに書き直すかもしれません。
実際にこちらの物体認識モジュールを使用したヒューマノイドロボットがこちら↓
https://www.youtube.com/watch?v=2rr84jnez4k