MagikEyeをROS1で動かすまで

# MagikEye

![IMG_9348 (1).JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630585/590f68b1-1631-85ce-6a17-42237228ac99.jpeg)

先日国内発売された[MagikEye ILT開発キット（DK-ILT001）](https://www.switch-science.com/catalog/7281/)を入手したので、動かすまでの手順をメモとして共有します。

# 環境

| 項目 | 値 |
| :-- | :-: | --: |
| Ubuntu | 18.04 |
| ROS | Melodic |
| Magikeye専用ラズパイ | Raspberry Pi 3B |

# なぜMagikeye？

* 小さいので、ロボットに載せやすい。
* 税込み9,900円と比較的安価。
* ラズパイを専用プロセッサとして使うのならば、余ってる古いラズパイを再利用できるのでは？

# 1. 環境構築 (兼デバイスの動作確認)

こちらの[日本語の説明のページ](https://support.magik-eye.com/?ln=jp)の通りでいけます。迷ったら、この[英語の説明サイト](https://support.magik-eye.com/viewGuide/ILT001/)を見ましょう。こちらの方が画像が多く、丁寧です。

接続はこのようなかたちです
[Magikeye] -> [ラズパイ3B] -LAN-> [PC]

Magikeye専用のラズパイはRaspberry Pi 3Bを使用しました。デスクトップPCとして使うには遅過ぎるスペックですが、このMagikeyeのプロセッサとしては十分ですね。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">MagikEyeのILT開発キットをラズパイ3Bで動かしている様子 その1<br><br>macのchromeで表示しています。遅延が全然ない。 <a href="https://t.co/OC9C1PsklQ">pic.twitter.com/OC9C1PsklQ</a></p>&mdash; nisshan にっしゃん (@nisshan_) <a href="https://twitter.com/nisshan_/status/1418446210646437888?ref_src=twsrc%5Etfw">July 23, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">MagikEyeのILT開発キットをラズパイ3Bで動かしている様子 その2<br><br>表示の視点を変えました。デジタルサイネージに余裕で使えますね。 <a href="https://t.co/4C8j64SUJL">pic.twitter.com/4C8j64SUJL</a></p>&mdash; nisshan にっしゃん (@nisshan_) <a href="https://twitter.com/nisshan_/status/1418446475445489669?ref_src=twsrc%5Etfw">July 23, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">MagikEyeのILT開発キットをラズパイ3Bで動かしている様子 その3<br><br>頭部をキャプチャー。これもいろんなアプリケーションを考えられそうです。 <a href="https://t.co/3lrAdwuZpO">pic.twitter.com/3lrAdwuZpO</a></p>&mdash; nisshan にっしゃん (@nisshan_) <a href="https://twitter.com/nisshan_/status/1418446906175361036?ref_src=twsrc%5Etfw">July 23, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">MagikEyeのILT開発キットをラズパイ3Bで動かしている様子 その4<br><br>スマホのブラウザでもスルスルと表示できました。 <a href="https://t.co/ZyOBrcC9DG">pic.twitter.com/ZyOBrcC9DG</a></p>&mdash; nisshan にっしゃん (@nisshan_) <a href="https://twitter.com/nisshan_/status/1418560893915328515?ref_src=twsrc%5Etfw">July 23, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 2. ROSパッケージのビルド

## 2-1. githubからコードを取ってくる

`git clone git@github.com:MagikEyeInc/SDK.git`

## 2-2. MagikEye C++ライブラリのインストール

```shell
sudo apt update && sudo apt upgrade -y
sudo apt install build-essential git cmake libboost-all-dev
cd SDK/client/cpp/mkeclient
mkdir build
cd build/
cmake ..
make
sudo make install
```

## 2-3. ROS1パッケージのビルド

```shell
source ~/.bashrc
cd catkin_ws/
source devel/setup.bash
cd src
rosdep install -i --from-paths ./
cd ../build
catkin_make --pkg mkeros --source ..
```

# 3. ROSノードの立ち上げと可視化

## 3-1. 設定

1.環境構築で控えたIPアドレスを `SDK/client/ros1/mkeros/config/mkeros1_config.yaml` に書いておきます。
あと、デバイス名のエイリアスも有効にしておきましょう（好きな名前でOK）。

```yaml
device: "192.168.x.x"
alias: "s1"
```

## 3-2. 起動

Terminal 1

```shell
roslaunch mkeros mkeros1_cpp.launch
```

Terminal 2

```shell
rosservice call /mkeros1_startpublish_s1
```

terminal 3

```shell
rviz
```

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">MagikEyeのILT開発キット、ROS1で動きました。<br><br>なんだろう、多分だけど、超上空でダイダラボッチみたいな巨大な手が動いている気がする。PointCloud2に変換する時に単位を間違えてるんじゃないかなぁ。<br>(Rviz右下のグレーの四角形がGrid…) <a href="https://t.co/eZt1wyuRkz">pic.twitter.com/eZt1wyuRkz</a></p>&mdash; nisshan にっしゃん (@nisshan_) <a href="https://twitter.com/nisshan_/status/1418531851480621062?ref_src=twsrc%5Etfw">July 23, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 見つけた問題

issueを登録しておきました。

- ~~[PointCloud scale might be wrong](https://github.com/MagikEyeInc/SDK/issues/2). 点群のスケールが1000倍巨大なので、ぐーっと視点を引きましょう。ミリメートルのまま、メートルが単位のROSにデータを流しているのが原因ですね。修正待ち。~~　→　2021/08/03修正されました。
- ~~[frame name "Map" is not compatible with ROS1/2](https://github.com/MagikEyeInc/SDK/issues/3). rvizで点群を表示するときはfixed frameをMapに変更する必要があります。修正待ち。~~　→　2021/08/03修正されました。

# ラズパイzeroWでの動作

同様にRaspberry Pi ZeroWでも動かせました。レイテンシーはありますが、小さくまとめられるので、ロボット制作には良いですね。初期設定時にUSB型のイーサネットケーブルコネクタが必要なので注意です。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">MagikEyeのILT開発キットをラズパイZeroWで動かしている様子<br><br>非力なのでもっと遅れるかと思ったけど、サイズとのトレードオフだと考えれば許容範囲ですね。 <a href="https://t.co/YE9BR32jR2">pic.twitter.com/YE9BR32jR2</a></p>&mdash; nisshan にっしゃん (@nisshan_) <a href="https://twitter.com/nisshan_/status/1418799672148127746?ref_src=twsrc%5Etfw">July 24, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">MagikEyeのILT開発キットをラズパイZeroWで動かしている様子<br><br>Wifiで飛ばしてROS1で表示してます。モバイルバッテリーで駆動できたので、完全ポータル環境ができました。 <a href="https://t.co/cJaa2yBQVA">pic.twitter.com/cJaa2yBQVA</a></p>&mdash; nisshan にっしゃん (@nisshan_) <a href="https://twitter.com/nisshan_/status/1418806098530914311?ref_src=twsrc%5Etfw">July 24, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 関連

* [MagikEye DK-ILT001 の特性](https://qiita.com/nisshan_/items/c2338db149301332002c)