tiscameraをUbuntu18.04で動かす

# 動作環境など

- OS: Ubuntu 18.04
- date: 2020/11/07

## 参考URL

- [Github](URL: https://github.com/TheImagingSource/tiscamera~)
- [オンラインドキュメント](https://www.theimagingsource.com/documentation/tiscamera/)
- [Ubuntuで依存関係が壊れている時の対応](https://blog.tizen.moe/entry/2016/02/13/202938)

## インストール

作業フォルダに移動する．

```
$ cd ~/catkin_ws/src
```

ダウンロード＆ビルドする．

```
$ git clone https://github.com/TheImagingSource/tiscamera.git
$ cd tiscamera
$ mkdir build
```

## 謎の不具合発生

公式の手順通り，次に依存関係をインストールしてtiscameraをcmakeしようとするとエラーになった．

```
$ ./scripts/install-dependencies.sh --runtime --compilation
$ cd build
$ cmake ..
```

のコマンドのあとのメッセージが下記の通り．

```
CMake Error at /usr/share/cmake-3.10/Modules/FindPkgConfig.cmake:415 (message):
  A required package was not found
Call Stack (most recent call first):
  /usr/share/cmake-3.10/Modules/FindPkgConfig.cmake:593 (_pkg_check_modules_internal)
  cmake/modules/FindGObjectIntrospection.cmake:39 (pkg_check_modules)
  src/gobject/CMakeLists.txt:20 (find_package)


-- Configuring incomplete, errors occurred!
See also "/home/hogehoge /catkin_ws/src/tiscamera/build/CMakeFiles/CMakeOutput.log".
```

調べていくと，

```
$ ./scripts/install-dependencies.sh --runtime --compilation
```

の実行時点でおかしなメッセージが出ていることを発見．

```
インストールすることができないパッケージがありました。おそらく、あり得
ない状況を要求したか、(不安定版ディストリビューションを使用しているの
であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移
動されていないことが考えられます。
以下の情報がこの問題を解決するために役立つかもしれません:

以下のパッケージには満たせない依存関係があります:
 libudev-dev : 依存: libudev1 (= 237-3ubuntu10.42) しかし、237-3ubuntu10.43 はインストールされようとしています
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。
```

libudevというパッケージがインストールできていなかったためcmakeのfind_package周りでエラーが発生していた模様．


## CMAKEできない問題を解決する手順

cmakeエラーでconfigureすらできない状況に．メッセージから察するに，ビルド時のubuntu環境と必要なパッケージとの互換性がないことが原因らしい（筆者はよく分かっていないが）．そこでパッケージに合ったバージョンにダウングレードする作業を行う．※他の人にも当てはまるかどうかは不明．すんなりいくなら公式ドキュメントの通りここを飛ばして次に進めればいい．

```
$ sudo apt install aptitude
$ sudo aptitude install libudev-dev
```

aptitudeはパッケージの互換性をチェックして解決策を提示してくれる便利ツール（同じく筆者はよく分かっていない）．これでinstallを実行すると下記のメッセージが出た．

```
以下の新規パッケージがインストールされます:
  libudev-dev{b} 
0 個のパッケージを更新、 1 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。
アーカイブの 19.1 kB を取得する必要があります。 展開後に 203 kB のディスク領域が新たに消費されます。
以下のパッケージには満たされていない依存関係があります:
 libudev-dev : 依存: libudev1 (= 237-3ubuntu10.42) 237-3ubuntu10.43 がインストール済みです
以下のアクションでこれらの依存関係の問題は解決されます:

     以下のパッケージを現在のバージョンに一時固定する:
1)     libudev-dev [インストールされていません]

この解決方法を受け入れますか? [Y/n/q/?] 
```

これだと解決策になっていないので（感情的にも）受け入れられない．．解決方法ってなんなんやー．ぜんぜん解決してへんやんかー．ここでコンマを打ってEnterすると別の選択肢が提示される．

```
以下のアクションでこれらの依存関係の問題は解決されます:

     以下のパッケージをダウングレードする:                                   
1)     libudev1 [237-3ubuntu10.43 (now) -> 237-3ubuntu10.42 (bionic-updates)]
2)     udev [237-3ubuntu10.43 (now) -> 237-3ubuntu10.42 (bionic-updates)]    

この解決方法を受け入れますか? [Y/n/q/?] 
```

はじめからこれを提示してくれたらいいやんか！なんせありがとう．ubuntuのバージョンを一つ前のものに戻すことに若干の気持ち悪さをいだきつつも，Yを打ってEnter．ここから公式と同じ手順に戻る．

ちなみにこのaptitudeを筆者に教えてくれた神は[ここ](https://blog.tizen.moe/entry/2016/02/13/202938)にいらっしゃいます．

## 依存関係をインストールしてCMAKE

```
$ git clone https://github.com/TheImagingSource/tiscamera.git
$ cd tiscamera
$ mkdir build
```

以降，公式的には上記コマンドのつづきに合流します．ubuntuのバージョンを下げたので，もう一度依存関係をインストールしてからcmakeする必要がある．

```
$ ./scripts/install-dependencies.sh --runtime --compilation
$ cd build
$ cmake ..
```

下記メッセージが出れば成功．

```
-- Configuring done
-- Generating done
-- Build files have been written to: /home/hogehoge/catkin_ws/src/tiscamera/build
```

次は公式の通りmakeする．

```
$ make -j
```

最後に下記のメッセージが出たら成功だ．

```
[100%] Built target tcam-ctrl
```

## 動作確認

動作確認するため，カメラを繋いで下記コマンドを実行．ウインドウが立ち上がってカメラ画像が確認できたら成功．なお今回動作確認に使ったのはImageingSource社製のUSB3.0カメラ（もろもろの都合につき詳細は伏せます）．

```
$ gst-launch-1.0 tcambin ! video/x-raw,format=BGRx ! videoconvert ! ximagesink
```