Jetson AGX Xavier上でrealsenseD455を動かしてみた(ROS対応)

## 経緯
[realsenseD455](https://www.intelrealsense.com/depth-camera-d455/)をJetson AGX Xavier上で動かす機会があったので、そのときの手順をまとめてみました。ネットでは、D435かD435iのセットアップ方法が多く、D455がほとんどなかったため少し手間取りました。今回は、librealsenseを入れた後に[realsense-ros](https://github.com/IntelRealSense/realsense-ros)も入れる手順を紹介します。

## 環境
- Jetson AGX Xavier 16GB
- Jetpack 4.3
- cuda 10.0
- ROS melodic
- cmake 3.17.1(**jetsonのデフォルトの3.10からアップデートする必要があります**。より新しいバージョンでも構いません。)
cmakeのアップデートには[こちら](https://qiita.com/comachi/items/d0c1ce5d7b90fe30fced)の記事を参考にしました。

## librealsenseとpyrealsenseのセットアップ
[こちら](https://dev.classmethod.jp/articles/use-realsense-d455-with-jetson-xavier-nx/)の記事を参考にして、セットアップを進めました。

```
$ git clone https://github.com/JetsonHacksNano/installLibrealsense
$ cd installLibrealsense
$ sh ./installLibrealsense.sh

$ vi ./buildLibrealsense.sh
------------以下のように変更------------
# D455をサポートしているバージョンに変更する
LIBREALSENSE_VERSION=v2.31.0
→ LIBREALSENSE_VERSION=v2.38.1

"time "(コマンド) を消す。おそらく２箇所ほどあります。

# Python3用のライブラリを出力させる（デフォルトではpython（Python2.7）用が出力されてしまう）
/usr/bin/cmake ../ -DBUILD_EXAMPLES=true -DFORCE_LIBUVC=true -DBUILD_WITH_CUDA="$USE_CUDA" -DCMAKE_BUILD_TYPE=release -DBUILD_PYTHON_BINDINGS=bool:true
→ /usr/bin/cmake ../ -DBUILD_EXAMPLES=true -DFORCE_LIBUVC=true -DBUILD_WITH_CUDA="$USE_CUDA" -DCMAKE_BUILD_TYPE=release -DBUILD_PYTHON_BINDINGS=bool:true -DPYTHON_EXECUTABLE=/usr/bin/python3
--------------------------------------

$ sh ./buildLibrealsense.sh
$ sudo cp /usr/local/lib/python3.6/pyrealsense2/py* /usr/local/lib

$ realsense-viewer
```
D455を繋いでrealsense-viewerとコマンドを打ったあとに、GUI上にrealsenseが取得したRGBデータなどが表示されれば成功です。次は、realsense-rosのセットアップです。

## realsense-rosのセットアップ
基本的には[こちら](https://qiita.com/karaage0703/items/cb9bbe1b4f2504f8ad0d)の記事を参考にしてセットアップを進めました。ROS melodicが入っている前提です。もし、ROSのバージョンが違う場合は、[こちら](https://github.com/IntelRealSense/realsense-ros/tags)で自分の環境に合うrealsense-rosのバージョンを探してください。今回のrealsense-rosのバージョンは2.2.17です。まずは下の手順通りにコマンドを実行します。

```
$ cd ~/catkin_ws/src
$ git clone https://github.com/IntelRealSense/realsense-ros
$ cd realsense-ros
$ git checkout -b 2.2.17 2.2.17
$ cd ..
$ git clone https://github.com/pal-robotics/ddynamic_reconfigure.git
$ catkin build
$ source ~/.bashrc
```
次に下のコマンドを実行してください。

```
$ roslaunch realsense2_camera rs_camera.launch
```

もう一つターミナルを開いて、下のコマンドを実行してください。

```
rosrun rqt_image_view rqt_image_view
```
出てきたGUIの左上のタブをimage_rawに選択して、RGBデータが表示されれば成功です。
![Screenshot from 2020-10-28 22-57-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663246/f13ee6af-5341-974b-e796-3691ab160e1d.png)

実行時に下のようなエラーが出る場合があります。

```
[ERROR] [1603862632.781403908]: Skipped loading plugin with error: XML Document '/opt/ros/melodic/share/rqt_virtual_joy/plugin.xml' has no Root Element. This likely means the XML is malformed or missing..
RosPluginProvider._parse_plugin_xml() plugin file "/opt/ros/melodic/share/rqt_virtual_joy/plugin.xml" in package "rqt_virtual_joy" not found
RosPluginProvider._parse_plugin_xml() plugin file "/opt/ros/melodic/share/rqt_virtual_joy/plugin.xml" in package "rqt_virtual_joy" not found
```
その場合は、[こちら](https://answers.ros.org/question/354039/rqt_virtual_joypluginxml-file-is-missing/
)の手順に従います。具体的には、以下の通りです。

```
$ git clone https://github.com/aquahika/rqt_virtual_joystick.git
$ cd rqt_virtual_joystick
$ mv plugin.xml /opt/ros/melodic/share/rqt_virtual_joy
```
rqt_virtual_joystickのplugin.xmlがないと言っているので、githubから落としてきたものを移動させています。これで、もう一度ノードを起動すれば大丈夫なはずです。

## まとめ
D455は、depth情報を取得できる距離などが遠くなったりしているらしいのですが、自分が思う最大の改善点は、土台の足がしっかりしたことだと思います(笑)。