Help us understand the problem. What is going on with this article?

Jetson nanoとRealSenseをROS対応ロボットに搭載する

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の箇所が解像度ですので、ネットワークの速度を考慮して設定しましょう。

以上です。快適なロボット開発を!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした