Jetson nanoとRealSenseをROS搭載ロボットに搭載する
RoboMaster S1にROSを搭載する計画は鋭意進めておりますが、
今回はRoboMaster S1に搭載する予定のJetson nanoのセットアップについてまとめます。
からあげさんなど、さまざまな記事をベースにさせていただいております。
準備
注意事項
- FANがないとインストール中に止まることがあるので注意(私は保冷剤で対応しましたw)
- 電源はDCジャックから5V/4A以上のACアダプターから供給しましょう
- RealSense用のUSBハブは相性問題が出やすいので注意
Jetson nanoのSDカードを用意
こちらに関しては、いろいろ書かれている方が多いので省略します。
https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#write
このサイトに従って作成してください。
やっておいたほうが良いこと
- SDカード作成し、そのまま作成したPC上でgpartedを使用してパーティションを広げておく
- その際にSWAP領域を作っておくのが良い(大体4GB)
- 作成したSWAP領域はfstabに書く必要があるが、Jetson nanoで起動してから書けばOK
- インストール時にAutologinをONにしておく
セットアップ
aptで必要なものを入れる
Jetson nanoが起動した後、Networkを接続して、いつもの通り
$ sudo apt update
$ sudo apt upgrade
その後必要なパッケージを入れていく(お好みでどうぞ)
$ sudo apt install avahi-daemon vim emacs git htop curl wget ssh
ROS melodicを入れる
ROS melodicはARM64用のパッケージが用意されているので、aptで入れることができます。
以下のサイトに従ってセットアップしてください。
http://wiki.ros.org/melodic/Installation/Ubuntu
Intel RealSense用ライブラリを入れる
今回はIntel RealSense D435とT265をセットアップします。
USBハブを使用する場合は相性問題が発生しがちなので、大手メーカーでDCジャックから別途電源をとれるものをおすすめします。
まず、各RealSenseは別途WindowsなどでFirmware Updateしておきましょう。
どうやらJetson nanoではIntel RealSenseは一筋縄では動かないようです。
カーネルにパッチを当てたり、librealsenseもコンパイルして入れる必要があります。
海外の方がGithubにスクリプトをおいていてくれているので、コレを利用しましょう。
Ubuntuのカーネルにパッチを当てて自動でコンパイルしてくれます。
$ git clone https://github.com/jetsonhacksnano/installLibrealsense
$ cd ~/installLibrealsense
$ ./patchUbuntu.sh
ここで一旦再起動します。
その後librealsenseを入れます。
$ ./installLibrealsense.sh
インストールが完了したらまずはUSBを接続し、
$ rs-enumerate-devices
を実行してデバイスが認識されていることを確認します。
認識できていない時は、USBを抜き差ししましょう。
認識できていれば、
$ realsense-viewer
で、D435とT265の動作が確認できます。
realsense-rosを入れる
intel RealSenseをROSで動かすためにrealsense-rosを入れます。
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_init_workspace .
$ git clone https://github.com/IntelRealSense/realsense-ros
$ cd realsense-ros
インストールしたlibrealsenseのバージョンにより、realsense-rosのバージョンも変わってきます。
LibRealSense v2.24.0の場合は2.2.7になります。
あってないとエラーが出るのでわかります。
$ git checkout -b 2.2.7 2.2.7
その後コンパイルします。
$ catkin_make -DCATKIN_ENABLE_TESTING=False -DCMAKE_BUILD_TYPE=Release
すると以下のエラーが出ます。
ddynamic_reconfigureConfig.cmake
ddynamic_reconfigure-config.cmake
なので
$ sudo apt install ros-melodic-ddynamic-reconfigure
再度、
$ catkin_make -DCATKIN_ENABLE_TESTING=False -DCMAKE_BUILD_TYPE=Release
これで準備は完了です。
ただし、T265のROS用のデモはSerialの指定が必要になっています。
$ rs-enumerate-devices | grep Serial
を実行すると、Serial No.がわかるので、T265のみを繋いで実行し、Serialをメモしておいてください。
以下の通りserial_noに記載しておきましょう。なおD435はシリアルナンバーを入れなくてもデモは動きます。
$ vi ./src/realsense-ros/realsense2_camera/launch/rs_t265.launch
<arg name="serial_no" default="XXXXXXXXXXXXXXX"/>
Intel Realsense T265のデモを実行
$ source ./devel/setup.bash
$ roslaunch realsense2_camera demo_t265.launch
Intel Realsense D435のデモを実行
$ roslaunch realsense2_camera demo_pointcloud.launch
リモート開発環境を構築
Jetson nanoを実機に搭載すると、ほとんどの場合ディスプレイを接続できなくなりますので、
VNCでのリモートデスクトップ接続は必須です。
そこで、Ubuntuには標準でVinoというVNCサーバーが搭載されているので、使用しましょう。
しかしながら、Jetson nanoのSDイメージのVinoの設定はどうもバグっていますので、以下の手順に従って有効化してください。
まず、SettingウインドウのDesktop Sharingの項目が正しく動くようにします。
$ sudo vi /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml
以下を追加
<key name='enabled' type='b'>
<summary>Enable remote access to the desktop</summary>
<description>
If true, allows remote access to the desktop via the RFB
protocol. Users on remote machines may then connect to the
desktop using a VNC viewer.
</description>
<default>false</default>
</key>
その後
$ sudo glib-compile-schemas /usr/share/glib-2.0/schemas
これで、Desktop SharingのWindowが正しく動作するようになりますので、
パスワードなどを設定しましょう。
Desktop Sharingの設定に項目がないものについてはターミナルで設定します。
$ gsettings set org.gnome.Vino require-encryption false
$ gsettings set org.gnome.Vino prompt-enabled false
Ubuntu 18.04からネットワークごとに有効無効を設定するそうなので、以下通りネットワークのUUIDを登録しておきます。
$ nmcli connection show
でUUIDを確認して以下を実行
$ dconf write /org/gnome/settings-daemon/plugins/sharing/vino-server/enabled-connections "['xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx']"
最後に設定内容を確認します。
$ gsettings list-recursively org.gnome.Vino
最後に、このままだとHDMIを接続していない状態でVNC接続を行うと、解像度が低すぎるので、以下の設定をします。
$ sudo vi /etc/X11/xorg.conf
以下を追加
Section "Monitor"
Identifier "DSI-0"
Option "Ignore"
EndSection
Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
Device "Default Device"
SubSection "Display"
Depth 24
Virtual 1280 800
EndSubSection
EndSection
Virtualの箇所が解像度ですので、ネットワークの速度を考慮して設定しましょう。
以上です。快適なロボット開発を!