はじめに
Azure Kinect DKのraw dataアクセスを可能にするSensor SDKはWindowsとLinuxでビルド可能とのことなのでUbuntu Linux 18.04でのビルドを試してみた
Dockerでのセットアップ
Linux DependenciesにはLinuxはDockerfileみたらわかるよみたいに割と雑に書かれているのでざっと見てからDocker Imageを構築してまずはコンテナの中でSDKのexampleなどをビルドしてみようと思う。building.mdが参考になった
まずはDockerfile
からイメージを作成してコンテナを起動する
cd $MYWORKSPACE
git clone https://github.com/microsoft/Azure-Kinect-Sensor-SDK.git
cd Azure-Kinect-Sensor-SDK/scripts/docker/
chmod +x ./setup-ubuntu.sh
docker build -t azure-kinect-sensor-sdk .
docker run -it -v $PWD:/tmp azure-kinect-sensor-sdk:latest bash
あとでビルドしたモジュールを他の環境でテストしたいのでホストのカレントディレクトリとコンテナ/tmp
を繋げておいた。コンテナにログインした後以下のような手順でSDKをビルドする
git clone https://github.com/microsoft/Azure-Kinect-Sensor-SDK.git
cd Azure-Kinect-Sensor-SDK/
mkdir build && cd $_
cmake .. -GNinja -DCMAKE_BUILD_TYPE=Debug
ninja
cmake .. -GNinja -DCMAKE_BUILD_TYPE=Debug
はデバッグビルドだが、リリースビルドの場合はcmake .. -GNinja
でいいみたいだ。C++は全然詳しくないんだがいろいろ調べる中でcmakeやninjaのことをざっくりと知った。
ビルドが成功したら./bin
の中にtoolsやexamplesなどのモジュールが出来上がっている。
tree ./bin
./bin
|-- AzureKinectFirmwareTool
|-- allocator_ut
|-- azure_c_shared_test
|-- calibration_info
|-- calibration_ut
|-- capturesync_ut
|-- color_ft
|-- color_ut
|-- cpp_projection_ft
|-- custom_track_ut
|-- depth_ft
|-- depth_ut
|-- depthmcu_ut
|-- deversion
|-- dynlib_ut
|-- enumerate_devices
|-- executables_ft
|-- executables_ft_custom
|-- fastcapture_streaming
|-- fastcapture_trigger
|-- fastpointcloud
|-- functional_custom_test_list.txt
|-- functional_test_list.txt
|-- global_ft
|-- green_screen
|-- handle_ut
|-- imu_ft
|-- imu_ut
|-- k4a_cpp_ft
|-- k4a_example_test
|-- k4arecord_custom_track
|-- k4arecorder
|-- k4aviewer
|-- latency_perf
|-- libk4a.so -> libk4a.so.1.4
|-- libk4a.so.1.4 -> libk4a.so.1.4.0
|-- libk4a.so.1.4.0
|-- libk4arecord.so -> libk4arecord.so.1.4
|-- libk4arecord.so.1.4 -> libk4arecord.so.1.4.0
|-- libk4arecord.so.1.4.0
|-- libtest_dynlib.so -> libtest_dynlib.so.1
|-- libtest_dynlib.so.1 -> libtest_dynlib.so.1.0
|-- libtest_dynlib.so.1.0
|-- logging_ut
|-- multidevice_ft
|-- opencv_example
|-- perf_test_list.txt
|-- playback_external_sync
|-- playback_perf
|-- playback_ut
|-- queue_ut
|-- record_ut
|-- rwlock_ft
|-- streaming_samples
|-- testutil
|-- throughput_perf
|-- transformation_example
|-- transformation_ut
|-- undistort
|-- unit_test_list.txt
`-- viewer_opengl
これらをいったんホスト側にコピーしておく
mkdir /tmp/build_bins
cp ./bin/* /tmp/build_bins
Docker以外でのビルド方法を検証してみる
既存のUbuntu上にSDKをセットアップすることを見据えてDockerfileが使っているsetup-ubuntu.shを参考に手順をつくってみた。手元に適当な素のUbuntu環境がなかったのでUbuntuのDockerコンテナを起動して検証してみる
docker pull ubuntu:18.04
docker run -it ubuntu:latest bash
以下の手順で正常にビルドすることができた。途中の# [yes]
のところでライセンス許諾を求められるのでyes
と入力する
apt update
apt-get install -y --no-install-recommends gnupg curl gcc-aarch64-linux-gnu g++-aarch64-linux-gnu file dpkg-dev qemu binfmt-support qemu-user-static pkg-config ninja-build doxygen clang python3 gcc g++ git git-lfs nasm cmake powershell libgl1-mesa-dev:amd64 libsoundio-dev:amd64 libjpeg-dev:amd64 libvulkan-dev:amd64 libx11-dev:amd64 libxcursor-dev:amd64 libxinerama-dev:amd64 libxrandr-dev:amd64 libusb-1.0-0-dev:amd64 libssl-dev:amd64 libudev-dev:amd64 mesa-common-dev:$arch uuid-dev:amd64 libopencv-dev:amd64
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
apt install -y --reinstall software-properties-common
apt-add-repository https://packages.microsoft.com/ubuntu/18.04/prod
apt-get update
apt install -y k4a-tools
# [yes]
apt install -y libk4a1.3-dev
# [yes]
git clone https://github.com/microsoft/Azure-Kinect-Sensor-SDK.git
cd Azure-Kinect-Sensor-SDK
mkdir build && cd $_
cmake .. -GNinja -DCMAKE_BUILD_TYPE=Debug
ninja
ビルドしたモジュールを他のLinuxで動作させてみる
開発環境は上記でいいがモジュールを動作させる用の環境はどうしたらいいか?と思って調べてみた。
file /root/host_dir/build_bins/fastpointcloud
/root/host_dir/build_bins/fastpointcloud: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, BuildID[sha1]=c484fa1efd1f450bfa3011c015504e727e9c5db2, with debug_info, not stripped
Staticなモジュールじゃないよね。いろいろ試してビルドされたlibk4a.so
あたりのライブラリの他にlibk4a1.3-dev
のヘッダなんかも必要だということがわかった。というわけで
docker run -it -v $PWD:/root/host_dir ubuntu:latest bash
とまた新しいUbuntu環境をつくってから
apt update
apt install -y gnupg curl
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
apt install -y --reinstall software-properties-common
apt-add-repository https://packages.microsoft.com/ubuntu/18.04/prod
apt-get update
apt install -y libk4a1.3-dev
[yes]
とlibk4a1.3-dev
をインストールしてからfastpointcloudのバイナリを実行してみる
cd /root
./host_dir/build_bins/fastpointcloud pointcloud.ply
[2020-03-15 09:43:22.710] [error] [t=4982] ../src/usbcommand/usbcommand.c (1037): usb_cmd_get_device_count(). No devices found
No K4A devices found
Azure KinectがUSB接続されていないので当然のエラーが出たけど、どうやらモジュールはうまく動作しているようだ。
おわりに
とりあえずはビルド環境と実行環境のセットアップのしかたがわかった。後日なんか作って実際にAzure Kinectのデータを採ってみようと思う。