Realsense D435について

### 特徴

<a target="_blank"  href="https://www.amazon.co.jp/gp/product/B078X17MGC/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B078X17MGC&linkCode=as2&tag=f0a2-22&linkId=1f6a62cb7db86c7f678f6aee31b5b6cf"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=B078X17MGC&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=f0a2-22" ></a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=f0a2-22&l=am2&o=9&a=B078X17MGC" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
公式サイト
https://click.intel.com/intelr-realsensetm-depth-camera-d435.html
から

- RGB + IR Stereo Camera + Pattern Projector
- Global Shutter
- Depth resolution: ~1280x720
- Depth FPS: 90fps
- Color: ~1920x1080@30fps
- Maximum Range: 10 meters
- USB 3.0 Type-C

追加で判明したこと
- RGB/PointCloudは640x480@60fpsまで可能(ROS)
- USB2.0も限定サポート（後述）
- 最小レンジは約15cmくらい

### インストール

- **更新** Dockerを使う方法もあるようだ。簡単ですね！ https://qiita.com/iory/items/fb1664486dc5c73e6ba3

- 公式レポジトリに従う `https://github.com/intel-ros/realsense`

  - `librealsense`のインストール

  ```bash
echo 'deb http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo xenial main' | sudo tee /etc/apt/sources.list.d/realsense-public.list
sudo apt-key adv --keyserver keys.gnupg.net --recv-key 6F3EFCDE
sudo apt-get update
sudo apt-get install librealsense2-dkms
sudo apt-get install librealsense2-utils
sudo apt-get install librealsense2-dev
sudo apt-get install librealsense2-dbg
sudo reboot
```

  [公式サイト](https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages)には

  > Verify that the kernel is updated :
modinfo uvcvideo | grep "version:" should include realsense string

  と記述があるが、とくに`realsense`の文字列は現れなかった。気にせずに進む。

  ```bash
$ modinfo uvcvideo | grep "version:"
version:        1.1.1
srcversion:     DBA8F055BDC0120170B3498
```

  - `realsense_ros` のインストール

  ```bash
cd /path/to/catkin/workspace
wstool set -t src intel-ros/realsense --git https://github.com/intel-ros/realsense -v 2.0.3 -u -y
rosdep install --from-paths src -i -r -n -y
catkin b realsense2_camera
source devel/setup.bash
```

### 使ってみる

```bash
roslaunch realsense2_camera rs_rgbd.launch
```

![d435.png](https://qiita-image-store.s3.amazonaws.com/0/10402/857d3030-d540-5a48-b50f-1bb1db7ef35a.png)

みえた。

```bash
rosrun rqt_reconfigure rqt_reconfigure
```

![rqt_reocnfigure.png](https://qiita-image-store.s3.amazonaws.com/0/10402/cc26b553-dd60-2263-1772-22b7a16b2a5e.png)

結構細かく設定できそう。

`rs435_depth_emitter_enabled`でIRパターンプロジェクションのON/OFFを切り替えられる。

![proj.png](https://qiita-image-store.s3.amazonaws.com/0/10402/d55c20fa-ad53-fa31-60bc-7284f15b783a.png)

ONのほうが目に見えてノイズが少ない。（静止画だとわかりにくい）

最小レンジはアバウトに15cmくらいのようだ。

![ezgif.com-optimize (1).gif](https://qiita-image-store.s3.amazonaws.com/0/10402/a0ea2a7b-85d3-7f7b-18a5-9ce66586d4c3.gif)

Color/IRともにデフォルトでは640x480@30fpsのようだが、`launch`ファイルの設定で変更可能。

試しに60fpsで動かしてみる。

```bash
roslaunch realsense2_camera rs_rgbd.launch color_fps:=60 infra1_fps:=60 infra2_fps:=60 depth_fps:=60
```

PointCloudとColor画像が60fpsになったことを確認できた。

(60より大きくするとダメでした)


### 複数台で使ってみる

- 気になるところ1: そもそも同時に使えるの？

以下のような`launch`ファイルを書けば使えました。
(`tf`がコリジョンしている気がしますが、今回は気にしていません。)

```xml:rs_multiple_rgbd.launch
<launch>
  <arg name="serial_no_camera1"/>
  <arg name="serial_no_camera2"/>

  <include file="$(find realsense2_camera)/launch/rs_rgbd.launch">
    <arg name="namespace" value="camera1"/>
    <arg name="serial_no"    value="$(arg serial_no_camera1)"/>
  </include>

  <include file="$(find realsense2_camera)/launch/rs_rgbd.launch">
    <arg name="namespace" value="camera2"/>
    <arg name="serial_no"    value="$(arg serial_no_camera2)"/>
  </include>
</launch>
```

で,シリアル番号は上の`rs_rgbd.launch`を起動した時に端末に表示されるものを使うか、`realsense-viewer`でも確認可能。

![realsense-viewer-seria.png](https://qiita-image-store.s3.amazonaws.com/0/10402/8787bf62-012f-6139-9cbb-47f9790d49b7.png)

```bash
roslaunch rs_multiple_rgbd.launch serial_no_camera1:=XXXXXXXXXX serial_no_camera2:=YYYYYYYYYY
```

- 気になるところ：パターンが干渉しないか？

2台のカメラで同じ空間を投影して、片方のカメラを一時的に遮蔽して点群の乱れをチェックしたところ、目に見える範囲では干渉しなかったです。

![ezgif.com-optimize.gif](https://qiita-image-store.s3.amazonaws.com/0/10402/07d525f7-0c62-d689-f310-9c8d7bd55f9c.gif)

### その他

ファームウェア更新通知があったので、更新してみる。

![realsense-viewer-update.png](https://qiita-image-store.s3.amazonaws.com/0/10402/e8d3a56d-59bf-9c0b-cc4b-34a8ab854f0e.png)

[CHANGELOG](https://www.intel.com/content/dam/support/us/en/documents/emerging-technologies/intel-realsense-technology/RealSense-D400-Series-Spec-Update.pdf)を見ると、

- USB2.0の限定サポート
- PCがスリープから回復した時にクラッシュする問題が解決

らしい。

[公式サイト](https://downloadcenter.intel.com/download/27924/Latest-Firmware-for-Intel-RealSense-D400-Product-Family?product=128255)からファームウェアをダウンロードして、[ドキュメント](https://www.intel.com/content/dam/support/us/en/documents/emerging-technologies/intel-realsense-technology/Linux-RealSense-D400-DFU-Guide.pdf)どおりにアップデートする。


```bash
furushchev@dango:~/Downloads $ lsusb
Bus 002 Device 011: ID 8086:0adb Intel Corp. 
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 138a:0090 Validity Sensors, Inc. 
Bus 001 Device 003: ID 04f2:b52c Chicony Electronics Co., Ltd 
Bus 001 Device 007: ID 8087:0a2b Intel Corp. 
Bus 001 Device 006: ID 0765:5010 X-Rite, Inc. 
Bus 001 Device 005: ID 058f:9540 Alcor Micro Corp. AU9540 Smartcard Reader
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
furushchev@dango:~/Downloads $ intel-realsense-dfu -b 002 -d 011 -f -i  Signed_Image_UVC_5_9_13_0.bin 
D400 busnum = 2
D400 devnum = 11
D400 FW file path = Signed_Image_UVC_5_9_13_0.bin
Could not find device in opmode: Device found, but incorrect (vid, pid) combo. Found (8086, adb)
device pid = 2779
Already in DFU mode, do update...
Updating FW...
DFU FW version in file = 5.9.13.0
DFU_version = 60
DFU_isLocked = 0
FW_highestVersion = 0.0.0.0
FW_lastVersion = 0.0.0.0
SerialNumber = 818413020052

Percentage done: 99
Running post download processes...
.
Post download processes done.

Done!
furushchev@dango:~/Downloads $ intel-realsense-dfu -p
FW version on device = 5.9.13.0
MM FW Version = 255.255.255.255
```

アップデートされた。

アップデートした状態でも上のROSノードは使えました。

## まとめ

イイね