4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Azure Kinect Sensor SDKをUbuntu Linuxでビルドしてみる

Posted at

はじめに

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++は全然詳しくないんだがいろいろ調べる中でcmakeninjaのことをざっくりと知った。

ビルドが成功したら./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のデータを採ってみようと思う。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?